对于小组来说,这是一个非常基本的问题,可以在不覆盖Hashset
方法时更好地理解equals()
行为。
首先,我创建了一个Employee
类并覆盖了它的hashcode()
,使其每次都返回int 1。 (确保碰撞)。
接下来在main方法中,我创建了4/5个员工对象并推入hashset
。现在,当我遍历hashset
时,我可以看到所有插入的对象。任何人都可以解释这种行为,特别是链接在这里发生的方式(请记住我没有覆盖相同的方法)?
答案 0 :(得分:0)
如果不覆盖equals
,则使用Object.equals
的默认实现,它只检查引用相等性:使用单独的new
调用创建的两个不同对象总是不同的(即使他们的内容相同)。所以难怪你看到所有插入的对象。但即使你创建了两个具有相同内容的对象,也会插入两个对象。
分布不均hashCode
只会影响性能,有效地将地图转换为链接列表(除非键为Comparable
并且您正在使用Java-8:在这种情况下,它将转换为更相似的东西到TreeSet
)。