问题:
给定两个Collection<?>
,检查它们是否包含相同的元素。
- 假设集合的实际实现是未知的
- 假设元素不按相同顺序出现
- 假设同一集合中没有元素出现两次
解决方案1:
boolean equals = c1.containsAll(c2) && c2.containsAll(c1);
解决方案 2:
boolean equals = new HashSet<?>(c1).equals(new HashSet<?>(c2));
我认为解决方案2比解决方案1更有效率(O(n) vs O(n^2))。
我对吗?还是我漏掉了什么?
List
并不等于一个Set
。如果你想比较两个Collection
的内容,你必须使用.containsAll()
或者在使用.equals()
之前确保它们是相同的集合类型。 - dimo414