【问题标题】:Does HashSet Provide Any Added Value to Performance in This Instance?HashSet 是否为该实例的性能提供任何附加值?
【发布时间】:2019-04-19 03:33:06
【问题描述】:

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

注意:listOfAccounts 是从 DAO 调用返回的 ArrayList。 personalAccount 是 Account 类型的 Object。

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

VS

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

【问题讨论】:

  • @JacobG。对,我明白了。刚刚注意到Set&lt;Account&gt; accounts 基本上是listOfAccounts 但作为一个集合......现在需要睡觉了。 :)

标签: java list arraylist contains hashset


【解决方案1】:
Set<Account> accounts = new HashSet<Account>(listOfAccounts);

以上行获取ArrayList 的所有元素并将其添加到HashSet。您可以遍历 List 并查看您的元素是否包含在其中,而不是执行所有这些操作。如果是,那么您可以删除它(这实际上是您的第二个 sn-p 正在做的事情)。

因此,首选第二个 sn-p,因为它们都以线性时间运行。

【讨论】:

    猜你喜欢
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2013-11-12
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    相关资源
    最近更新 更多