ArrayList按Id检索对象

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项,以便更好地理解原因 - 或查看本文.

  • 只有基于散列的映射才会给你'O(1)`查找. (2认同)

Rag*_*ghu 5

更好的方法是使用地图。

对于您的情况,您可以通过以下方式实现

    Map<account.getId(), account>
Run Code Online (Sandbox Code Playgroud)

您可以使用“get”方法来检索适当的帐户对象。

    accountMap.get(id);
Run Code Online (Sandbox Code Playgroud)


Aha*_*kat 5

简单的解决方案:

Account account = accountList.stream().filter(a -> a.getId() == YOUR_ID).collect(Collectors.toList()).get(0);
Run Code Online (Sandbox Code Playgroud)