我目前有三个对象类,交易、用户和组。交易收集: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>();
一个简短的例子:
假设您有一个简单的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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句