【问题标题】:Java Hashset behavior when equal NOT overridden? [duplicate]相等未覆盖时的Java Hashset行为? [复制]
【发布时间】:2016-03-19 19:47:36
【问题描述】:

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

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

【问题讨论】:

    标签: java collision hashset chaining


    【解决方案1】:

    当您不覆盖 equals 时,将使用 Object.equals 的默认实现,它仅检查引用是否相等:使用单独的 new 调用创建的两个不同对象总是不同的(即使它们的内容是相同的)。所以难怪你看到所有插入的对象。但即使你创建了两个内容相同的对象,它们也会被插入。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-09
      • 2012-11-05
      • 2013-01-30
      • 2021-12-23
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      相关资源
      最近更新 更多