我可以有一个类型为object的ArrayList,其中包含指向Java中对象的指针的列表吗?

时间:2019-05-25 14:48:20

标签: java pointers reference

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

答案 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);