因此,我正在使用Java中现有的方法来返回列表(ArrayList)。但是,我想为其添加一些功能,以便在指定时将排除某个对象。现在我了解到,通常在HashSet上使用contains()会比ArrayList产生更好的性能,但是我想知道下面的两种代码版本是否有合理的性能提升:

注意:listOfAccounts是从DAO调用返回的ArrayList。 personalAccount是帐户类型的对象。

if (excludePersonalAccount) {
   Set<Account> accounts = new HashSet<Account>(listOfAccounts);
   if (accounts.contains(personalAccount) {
      listOfAccounts.remove(personalAccount);
   }
}


VS

if (excludePersonalAccount) {
   listOfAccounts.remove(personalAccount)
}

最佳答案

Set<Account> accounts = new HashSet<Account>(listOfAccounts);


上一行采用ArrayList的所有元素,并将其添加到HashSet。您可以遍历List并查看是否在其中包含您的元素,而不是执行所有这些操作。如果是这样,则可以将其删除(这实际上是您的第二个片段所执行的操作)。

因此,第二个代码段是首选,因为它们都以线性时间运行。

10-05 17:54