Lui*_*ese 5 java hashcode hash-collision
我在阅读JavaDoc的Object.hashCode方法,它说
在合理可行的范围内,由Object类定义的hashCode方法确实为不同的对象返回不同的整数。(这通常是通过将对象的内部地址转换为整数来实现的。
但是无论其实现是什么,hashCode方法总是返回一个(假设为正数)整数,因此给定Integer.MAX+1不同的对象,其中两个对象将具有相同的哈希码。
为什么JavaDoc在这里“否认”冲突?考虑到使用了内部地址并且“ 来了,您永远不会立即Integer.MAX+1在内存中存储对象,因此我们可以说它实际上总是唯一的 ” ,这是否是一个实用的结论?
这个错误条目(感谢Sleiman Jneidi)对我的意思给出了确切的理解(似乎已经有10多年的讨论了):
看来,很多(也许是多数)程序员都认为这意味着默认实现以及System.identityHashCode将产生唯一的哈希码。
实际上,“在合理范围内尽可能多”的限定条件不足以使哈希码在实践中并不明显。
| 归档时间: |
|
| 查看次数: |
635 次 |
| 最近记录: |