java - Java如何快速比较两个集合在Java中是否完全相同?

标签 java collections arraylist hashset

java中如何快速比较两个集合是否完全相同?

例如:

如果这个集合是Set,比较它们包含相同的对象并且它们的大小相同。

代码如下所示

public boolean isSameSets(Set<T> set1, Set<T> set2){

    if (set1.size() != set2.size()) {
        return false;
    }

    return set1.containAll(set2) && set2.containAll(set1);
}

但是如果集合是列表,因为列表是排序集合,我们可以迭代比较每一个元素,我觉得这种方式不是最好的,请问谁能告诉我如何快速比较它们?

============================================= =========

谢谢大家,其实Collection equals方法可以做到,包括Set和List。

最佳答案

Collection equals(Object) 方法应该为您做这件事。 javadoc准确解释了“等于”对集合的含义,并进一步细化了扩展集合的接口(interface)的语义。

不同的集合类将有自己的此方法的实现,并针对各自的语义模型和表示进行了调整。例如,List 上的 equals 方法会考虑元素顺序,但 Set< 上的 equals 方法 通常不会。

有人问:

cant we use containsAll(Collection).

一般来说,不会。例如,具有相同元素的两个列表不一定相等。您还必须考虑列表顺序。 (此外,使用 containsAll 比较列表是 O(N^2) ,其中 List 的高效 equals 实现code> 应该是 O(N) ... 在最坏的情况下。)

这同样适用于使用 retainsAll

关于java - Java如何快速比较两个集合在Java中是否完全相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12649178/

相关文章:

java - 在 Java 中填充二维数组

java - 文字显示为灰色

java - 哈希集可以在内部使用一些其他集合而不是 HashMap 吗

java - 使用 ArrayList <Integer> 对整数进行排序

Java Swing : Controlling focus with textfield and autocompletion dialog/menu

java - 如何在表格中将 URL 显示为可点击的 URL 并允许它们在默认浏览器中打开?

c# - 如何在不循环的情况下合并两个字典?

java - 为什么 java.util.Set<V> 接口(interface)不提供 get(Object o) 方法?

java - ArrayList内容访问后变成 'null'?

java - 从字符串列表中删除停用词