假设我有这种情况
Long id = -1L;
System.out.println( id.hashCode() );
id = 0L;
System.out.println( id.hashCode() );
Run Code Online (Sandbox Code Playgroud)
你猜怎么着?两个输出都给出相同的数字(0)!我的问题是:
在此先感谢回复:)
为什么会这样?
由于执行的Long.hashCode是如下:
结果是此Long对象持有的原始long值的两半的异或.也就是说,哈希码是表达式的值:
Run Code Online (Sandbox Code Playgroud)(int)(this.longValue()^(this.longValue()>>>32))
我怎么能省略这个并计算0和-1的正确哈希值?
这些是适当的哈希.哈希不保证是独一无二的; 事实上,如果有超过2 32个可能的输入值,它们将保证不是唯一的.
如果你想要一个不同的行为,你需要编写一个MyInteger行为不同的类(虽然我怀疑没有真正的理由这样做).
| 归档时间: |
|
| 查看次数: |
877 次 |
| 最近记录: |