HashSet 和 TreeSet 都是继承自AbstractSet,
这两个类都没有实现是equals方法,所以比较的时候回使用父类的方法。
下面是父类的方法。
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Set))
return false;
Collection c = (Collection) o;
if (c.size() != size())
return false;
try {
return containsAll(c);
} catch (ClassCastException unused) {
return false;
} catch (NullPointerException unused) {
return false;
}
}
可以看到比较会调用containsAll() 方法。具体代码如下:
public boolean containsAll(Collection> c) {
for (Object e : c)
if (!contains(e))
return false;
return true;
}
看到这就明白了,两个都是空,所以返回true.