java - HashSet 在此实例中是否为性能提供任何附加值?

标签 java list arraylist contains hashset

因此,我正在使用 Java 中返回列表 (ArrayList) 的现有方法。但是,我想为其添加一些功能,以便如果指定,它将排除某个对象。现在我明白,一般来说,在 HashSet 上使用 contains() 会比 ArrayList 产生更好的性能,但我想知道下面的代码的两个变体是否有合理的性能提升:

注释:listOfAccounts 是从 DAO 调用返回的 ArrayList。 PersonalAccount 是 Account 类型的对象。

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 并查看其中是否包含您的元素,而不是执行所有这些操作。如果是,那么您可以将其删除(这本质上就是您第二个片段正在做的事情)。

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

关于java - HashSet 在此实例中是否为性能提供任何附加值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53329486/

相关文章:

java - 需要 Java regEx 来读取字符串中的数字

java - 如何在java中将 HashMap 的哈希值转换为json

python - 检查整数的连续性并返回唯一值

c++ - 为什么迭代一个大的 std::list 这么慢?

Java 数组列表索引

java - AccessDecisionManager,如何添加RoleVoter

java - 多平台 getResourceAsStream

java - 如何直接使用OSGI捆绑jar文件中的类?

JAVA,列表列表

java - 如何编写比较器以将列表的所有元素与输入进行比较并移动到顶部