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/