首页 > 解决方案 > 我可以拥有一个对象类型的 ArrayList,其中包含指向 Java 中对象的指针列表吗?

问题描述

我目前有三个对象类,交易、用户和组。交易收集: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>();

标签: javapointersreference

解决方案


一个简短的例子:

假设你有一个简单的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);

推荐阅读