我目前有三个对象类,交易,用户和组。交易收集: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>();
答案 0 :(得分:0)
一个简短的例子:
假设您有一个简单的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);