以这种方式调用方法System.identityHashCode(...)
,因为它识别对象,因此两个不同的对象不能具有相同的身份哈希码,对吗?
它返回一个int
。但是,在具有大量 RAM 的系统上,当对象数量超过整数范围 2^32
时会发生什么?
在不重写 equals
和 的类上进行操作时,
?HashMap
和 HashSet
不会有问题吗>哈希码
编辑:
如果 int
还不够,我可以为对象获取一些真正的唯一 ID 吗?
最佳答案
不,这只是正常的哈希冲突。允许两个不相等的对象返回相同的哈希值 - 只是需要比较它们是否相等。
这并不限于身份哈希码 - 考虑String.hashCode()
。显然,可能的字符串比 int
值多,因此必须至少有一个哈希值,该值是多个字符串哈希的结果。 HashMap
/HashSet
首先使用哈希码来快速将可能匹配的范围缩小到具有相同哈希码的条目,然后调用 依次对每个条目执行 equals()
,直到找到匹配项或确定没有任何条目等于给定的键。
关于java - 当对象数量超过 `int` 所能容纳的数量时,身份哈希码会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3324749/