因此,我正在使用 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/