List<String> list = Arrays.asList("Snehal", "Masne", "Anything", "Else");
HashSet<String> hashSet = new HashSet<String>(list);
TreeSet<String> treeSet = new TreeSet<String>(list);
System.out.println("Equality = " + hashSet.equals(treeSet)); // returns True
equals()如何通过比较diff结构来评估结果?怎么来的呢?只是比较Hashcode?如果是这样,怎么会一样呢?
答案 0 :(得分:3)
Set
的Javadoc有答案:
boolean java.util.Set.equals(Object o)
将指定对象与此集进行相等性比较。如果指定的对象也是一个集合,则返回true,两个集合具有相同的大小,并且指定集合的每个成员都包含在此集合中(或者等效地,此集合的每个成员都包含在指定的集合中)。 此定义确保equals方法在set接口的不同实现中正常工作。
只要两个Set
具有完全相同的元素,如果它们具有Set
接口的不同实现就没有关系。
答案 1 :(得分:1)
在AbstractSet#equals
下面调用containsAll
。对于每个单独的元素,此方法会检查它在另一个Set
中的存在:
public boolean containsAll(Collection<?> c) {
for (Object e : c)
if (!contains(e))
return false;
return true;
}
这将调用HashSet#contains
,如下所示:
public boolean contains(Object o) {
return map.containsKey(o);
}
请注意,由于HashSet
只不过是具有虚拟值的HashMap
- hashCode
会被调用,但只能找到它可能位于的桶 - 比较是仍在使用equals