Mad*_*uja 15 java collections arraylist
假设我有一个ArrayList<Account>非常简单的自定义对象.例如:
class Account
{
public String Name;
public Integer Id;
}
Run Code Online (Sandbox Code Playgroud)
我想Account根据Id应用程序的许多部分中的参数检索特定对象.最好的办法是什么?
我想扩展,ArrayList但我相信必须有更好的方法.
Ami*_*ani 24
听起来你真正想要使用的是a Map,它允许你根据键检索值.如果你坚持ArrayList,你唯一的选择是遍历整个列表并搜索对象.
就像是:
for(Account account : accountsList) {
if(account.getId().equals(someId) {
//found it!
}
}
Run Code Online (Sandbox Code Playgroud)
与
accountsMap.get(someId)
Run Code Online (Sandbox Code Playgroud)
这种操作是O(1)在a中Map,而O(n)在a中List.
我正在考虑扩展ArrayList,但我相信必须有更好的方法.
一般来说,这是糟糕的设计.阅读有效的Java第16项,以便更好地理解原因 - 或查看本文.
更好的方法是使用地图。
对于您的情况,您可以通过以下方式实现
Map<account.getId(), account>
Run Code Online (Sandbox Code Playgroud)
您可以使用“get”方法来检索适当的帐户对象。
accountMap.get(id);
Run Code Online (Sandbox Code Playgroud)
简单的解决方案:
Account account = accountList.stream().filter(a -> a.getId() == YOUR_ID).collect(Collectors.toList()).get(0);
Run Code Online (Sandbox Code Playgroud)