我可以有一个object类型的ArrayList,它有一个指向Java中对象的指针列表吗?
我目前有三个对象类:事务、用户和组。。事务收集:id、付款人、日期、描述、金额和相关用户id的数组列表。这很好地工作,但是通过迭代用户的方法添加了许多行代码,以找到哪个用户是谁。我的问题是,我能有一个ArrayList*partecipants=新的ArrayList;哪个有所有用户的参考我可以有一个object类型的ArrayList,它有一个指向Java中对象的指针列表吗?,java,pointers,reference,Java,Pointers,Reference,我目前有三个对象类:事务、用户和组。。事务收集:id、付款人、日期、描述、金额和相关用户id的数组列表。这很好地工作,但是通过迭代用户的方法添加了许多行代码,以找到哪个用户是谁。我的问题是,我能有一个ArrayList*partecipants=新的ArrayList;哪个有所有用户的参考 class Transaction{ private static AtomicInteger count = new AtomicInteger(0); private int id = c
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>();
举个简单的例子:
假设您有一个简单的用户类:
假设您最初有一个列表:
List<User> users;
但是,如果用户列表很大,则速度可能会很慢
您可以将用户存储在地图中:
或者更传统地说:
usersById = new HashMap<>();
for(User u : users) {
usersById.put(u.getId(), u);
}
您的多行代码可能很容易压缩-为什么不向我们展示您的相关代码?是的,但以拥有100万用户为例。迭代查找具有该ID的用户是非常低效的。因此,我认为在该ArrayList中引用用户会更好。。我知道可以用C语言完成,但我对java知之甚少。公共字符串getUserNameint id{//done String name=null;forUser user:general.users{ifuser.get_id==id{name=user.get_name;break;}}ifname==null{ambrogio.sendTextError;return null;}否则{return name;}听起来你想要一张地图,类似于Map usersById=newhashmap;像我建议的那样,一张地图可以做到这一点。无需迭代,只需执行字符串userName=usersById.getid。
users.stream().filter(u -> u.getId() == id).findFirst();
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);
}
User user = usersById.get(id);