java如何快速比较两个在Java中完全相同的集合?
例如:
如果设置了此集合,则比较它们包含相同对象且大小相同。
代码如下所示
public boolean isSameSets(Set<T> set1, Set<T> set2){
if (set1.size() != set2.size()) {
return false;
}
return set1.containAll(set2) && set2.containAll(set1);
}但是如果集合是list,因为list是有序集合,我们可以迭代比较每个元素,我认为这种方式不是最好的,谁能告诉我如何快速比较它们?
========================================================
谢谢大家,实际上,Collection equals方法可以做到这一点,包括Set和List。
发布于 2012-09-29 09:37:37
集合equals(Object)方法应该会为您完成此操作。javadoc准确地解释了"equals“对于集合的含义,并且为扩展集合的接口进一步改进了语义。
不同的集合类将有自己的此方法实现,并针对其各自的语义模型和表示进行了调整。因此,例如,List上的equals方法将考虑元素顺序,但Set上的equals方法通常不会。
有人问:
我们不能使用containsAll(集合)。
一般来说,不是。例如,具有相同元素的两个列表不一定相等。您还必须考虑列表顺序。(此外,使用containsAll比较列表是O(N^2),其中List的有效equals实现应该是O(N) ...在最坏的情况下。)
这同样适用于使用retainsAll。
发布于 2012-09-29 09:38:42
HashSet.equals方法已经进行了比较,以确保每个集合中都有完全相同的元素。ArrayList.equals做同样的事情,除了它还检查顺序。
发布于 2012-09-29 09:36:51
您可以使用Collection.retainAll()
https://stackoverflow.com/questions/12649178
复制相似问题