Java文档中使用的哈希集约定
为什么TreeSet
和HashSet
的add()
方法的Oracle Java API文档说明:
an element e is added only if there is no e2 in the set where
(e==null ? e2==null : e.equals(e2))
然而,TreeSet
使用compareTo()
,而HashSet
使用hashCode()
来确定相等性。两者都忽略equals()
的值。我担心文档不准确,或者是我对约定或算法的理解有缺陷
# 1 楼答案
您认为TreeSet文档不正确是正确的
关于HashSet,您是不正确的,因为它使用
equals()
hashCode()
不用于相等性测试,仅用于快速搜索# 2 楼答案
TreeSet
在其文档中解释了这一点:对于
HashSet
,文档的一个隐含期望是Set
中的对象得到正确实现;如果hashCode()
没有正确实现,那么它不是HashSet
违反了它的规范,而是传递给它的对象