我正在尝试优化一段比较列表元素的代码。
例如。
public void compare(Set<Record> firstSet, Set<Record> secondSet){
for(Record firstRecord : firstSet){
for(Record secondRecord : secondSet){
// comparing logic
}
}
}
请注意集合中的记录数会很高。
谢谢
谢卡尔
最佳答案
firstSet.equals(secondSet)
这真的取决于你想在比较逻辑中做什么......即如果你在一个集合中找到一个元素而不在另一个集合中会发生什么?你的方法有一个 void
返回类型,所以我假设你会在这个方法中做必要的工作。
如果需要,可以进行更细粒度的控制:
if (!firstSet.containsAll(secondSet)) {
// do something if needs be
}
if (!secondSet.containsAll(firstSet)) {
// do something if needs be
}
如果您需要获取一组中的元素而不是另一组中的元素。
编辑:set.removeAll(otherSet)
返回一个 boolean 值,而不是一个集合。要使用 removeAll(),您必须复制该集合然后使用它。
Set one = new HashSet<>(firstSet);
Set two = new HashSet<>(secondSet);
one.removeAll(secondSet);
two.removeAll(firstSet);
如果 one
和 two
的内容都是空的,那么你知道这两个集合是相等的。如果不是,那么你已经得到了使集合不相等的元素。
您提到记录的数量可能很高。如果底层实现是一个HashSet
,那么每条记录的获取都是在O(1)
时间内完成的,所以没有比这更好的了。 TreeSet
是 O(log n)
。
关于java - 在 Java 中比较两组的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3341202/