HashSet 在此实例中是否为性能提供任何附加值?
Does HashSet Provide Any Added Value to Performance in This Instance?
因此,我正在使用 Java 中的现有方法,即 returns 列表 (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 中的现有方法,即 returns 列表 (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
并查看您的元素是否包含在其中,而不是执行所有这些操作。如果是,那么您可以将其删除(这实际上是您第二个片段所做的)。
出于这个原因,第二个片段是首选,因为它们都 运行 在线性时间内。