jav*_*top 2 java memory jvm hashcode
这种方法System.identityHashCode(...)被调用,因为它识别对象,因此两个不同的对象不能具有相同的身份 - 哈希码,对吧?
System.identityHashCode(...)
它返回一个int.但是当对象数量超过整数范围时,在具有大量RAM的系统上会发生什么2^32?
int
2^32
那岂不是一个问题,HashMapS和HashSet其上没有覆盖类的工作时小号equals和hashCode?
HashMap
HashSet
equals
hashCode
编辑: 如果int还不够,我可以为对象获得一些真正的唯一ID吗?
Jon*_*eet 7
不,它只是一个正常的哈希冲突.允许两个不相等的对象返回相同的哈希值 - 只是那时它们都需要进行相等性的比较.
这不仅限于身份哈希码 - 请考虑String.hashCode().显然,有更多可能的字符串而不是int值,因此必须至少有一个散列值,这是散列多个字符串的结果.A HashMap/ HashSet将首先使用哈希码快速将可能匹配集缩小到仅具有相同哈希码的那些条目,然后依次调用equals()每个条目直到找到匹配或确定没有条目相等到给定的密钥.
String.hashCode()
equals()
归档时间:
15 年,3 月 前
查看次数:
891 次
最近记录: