我目前有三个对象类,Transaction、User 和 Group。Transaction 收集:id、付款人、日期、描述、金额和涉及的用户 ID 的 ArrayList。这非常有效,但通过遍历用户以查找哪个用户是谁的方法添加了许多代码行。我的问题是,我可以有一个 ArrayList *partecipants = new ArrayList; 哪个有所有用户的参考?class Transaction{ private static AtomicInteger count = new AtomicInteger(0); private int id = count.incrementAndGet(); private String paid; private Date date; private String message; private Double amount; private ArrayList<Integer> users = new ArrayList<Integer>();
1 回答
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
一个简短的例子:
假设您有一个简单的User课程:
public class User {
private int id;
private String name;
// etc
}
假设您最初拥有其中List的一个:
List<User> users;
通过 id 查找用户可以这样完成:
users.stream().filter(u -> u.getId() == id).findFirst();
但是,如果用户列表很大,那可能会很慢。
您可以将用户存储在Map:
Map<Integer, User> usersById;
这个地图只会引用其他对象,所以占用空间很小(但仍然占用一些空间,就像一个索引)。
您可以像这样填写这张地图:
usersById = users.stream().collect(Collectors.toMap(User::getId, Function.identity()));
或者更传统地说:
usersById = new HashMap<>();
for(User u : users) {
usersById.put(u.getId(), u);
}
现在要通过 id 查找用户,您可以使用它(具有O(1)性能):
User user = usersById.get(id);
添加回答
举报
0/150
提交
取消