java - 在 Java 中比较两组的最快方法是什么?

标签 java performance set

我正在尝试优化一段比较列表元素的代码。

例如。

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);

如果 onetwo 的内容都是空的,那么你知道这两个集合是相等的。如果不是,那么你已经得到了使集合不相等的元素。

您提到记录的数量可能很高。如果底层实现是一个HashSet,那么每条记录的获取都是在O(1) 时间内完成的,所以没有比这更好的了。 TreeSetO(log n)

关于java - 在 Java 中比较两组的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3341202/

相关文章:

javascript - 如何在 jQuery 中包装一组可重复的元素?

java - 静态方法可能包含在类中的 3 种可能情况是什么?

java - LWJGL/OpenGL 滞后绘制立方体阵列

Java 的 Arrays.fill() 与多维数组

performance - Web 应用程序的可扩展性和性能、方法?

sql - 如何在单个 SELECT 查询中设置多个 T-SQL 变量?

python - 无法设置 Pandas 数据框的索引 - 获取 "KeyError"

java - Cassandra 选择按添加日期排序的行

java - GXT Paging Grid服务方法

c - 击败或满足 OS X memset(和 memset_pattern4)