代码之家  ›  专栏  ›  技术社区  ›  java.is.for.desktop

当“int”不能容纳的对象太多时,identity hashcode会发生什么变化?

  •  2
  • java.is.for.desktop  · 技术社区  · 16 年前

    System.identityHashCode(...) 这样叫是因为 对象,所以两个不同的对象不能有相同的标识哈希码,对吗?

    int . 但是,在一个拥有大量RAM的系统上,当对象的数量超过整数范围时会发生什么呢 2^32

    HashMap s和 HashSet 在不重写的类上操作时 equals hashCode ?

    编辑:
    如果 是不够的,我可以得到一些真正的唯一ID的对象?

    3 回复  |  直到 16 年前
        1
  •  7
  •   Jon Skeet    16 年前

    不,这只是一个普通的散列冲突。允许两个不相等的对象返回相同的散列-只是需要比较它们是否相等。

    这并不局限于身份哈希码-请考虑 String.hashCode() . 显然,可能的字符串比 int HashMap HashSet 首先使用散列码将可能的匹配集快速缩小到只有那些具有相同散列码的条目,然后调用 equals() 依次对每个项执行,直到找到匹配项或确定所有项都不等于给定的键为止。

        2
  •  4
  •   user207421    16 年前

    错了。任何数量的对象都可以具有相同的identityHashCode。

        3
  •  2
  •   Peter Lawrey    16 年前

    你可以生成一个 UUID 对于每个需要唯一id的对象。然而,重复的id在理论上仍然是可能的,只是极不可能。