java - 我可以拥有一个对象类型的 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>();
解决方案
一个简短的例子:
假设你有一个简单的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);
推荐阅读
- .net - Naudio 无法完全读取 WMA、OGG 和 AC3 音频文件
- c# - 在日历上显示日期范围
- python - ValueError:零大小数组到没有标识的归约操作最小值。Astropy 的问题
- database - 关于 ERD 的计算机科学
- mysql - 条件语句 - MYSQL
- r - Why does dcast not accept x[length(x)]?
- mysql - 如何连接payara和MySQL?
- typescript - Redux with typescript - handle same action in different reducers
- mysql - 需要在 Mac El Capitan 上安装旧版本的 MySQL
- reactjs - How to get Route component to Render properly