当等于NOT覆盖时,Java Hashset行为?

时间:2015-12-14 10:52:40

标签: java collision hashset chaining

对于小组来说,这是一个非常基本的问题,可以在不覆盖Hashset方法时更好地理解equals()行为。

首先,我创建了一个Employee类并覆盖了它的hashcode(),使其每次都返回int 1。 (确保碰撞)。 接下来在main方法中,我创建了4/5个员工对象并推入hashset。现在,当我遍历hashset时,我可以看到所有插入的对象。任何人都可以解释这种行为,特别是链接在这里发生的方式(请记住我没有覆盖相同的方法)?

1 个答案:

答案 0 :(得分:0)

如果不覆盖equals,则使用Object.equals的默认实现,它只检查引用相等性:使用单独的new调用创建的两个不同对象总是不同的(即使他们的内容相同)。所以难怪你看到所有插入的对象。但即使你创建了两个具有相同内容的对象,也会插入两个对象。

分布不均hashCode只会影响性能,有效地将地图转换为链接列表(除非键为Comparable并且您正在使用Java-8:在这种情况下,它将转换为更相似的东西到TreeSet)。