【问题标题】:hashcode collisions for different classes不同类的哈希码冲突
【发布时间】:2011-09-09 18:16:14
【问题描述】:

我在整数字段周围有两个简单的包装类,我必须在其中覆盖 equals() 和 hashCode()。最后,它们都使用了相同的 hashCode() 算法,因此如果 Integer 字段相同,则哈希码会发生冲突。

由于对象是不同的类型,这是否重要,或者我是否应该只关心我是否希望将它们作为键混合在同一个 HashMap 中?

【问题讨论】:

    标签: java


    【解决方案1】:

    hashCode() 对两个对象相等表示“有机会这些对象相等,请通过调用 equals() 仔细查看”。只要这些类的equals() 方法正确,哈希码相同就不是问题。

    hashCode() 的一般规则是,如果两个对象相等,它们的哈希码也应该相等。请注意,规则不是“如果两个对象具有相同的哈希码,则它们应该相等。”

    【讨论】:

      【解决方案2】:

      如果您可能有一个哈希映射,其中两种类型的对象具有相同的值,那么这显然是一个潜在的性能问题。 HashMap 之类的不看实际的运行时类 - 实际上没有标准的方法来判断不同类的两个对象是否可以相等(例如,Lists 在ArrayListArrays.asList 生成的相同顺序应该比较相等)。对于HashMap,我猜命中不会太糟糕,但可能会更糟,例如,在第一次检查中获得成功的探测实现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-30
        • 1970-01-01
        • 1970-01-01
        • 2012-05-13
        • 2020-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多