最好的实现?这是一个难题,因为它取决于使用模式。
在几乎所有情况下,Josh Bloch的 有效Java项目8(第二版)中都提出了合理的良好实现。最好的办法是在那里查找,因为作者在那里解释了为什么这种方法很好。
简短版
1. 创建一个
int result并分配一个非零值。
如果字段f为boolean:计算
(f ? 0 : 1)
;- 如果该字段f是
byte
,char,short或int:计算(int)f
; - 如果字段f为
long
:计算(int)(f ^ (f >>> 32))
; - 如果字段f为
float
:计算Float.floatToIntBits(f)
; - 如果字段f是
double
:计算Double.doubleToLongBits(f)
和处理返回值,就像每个长值一样; - 如果字段f是一个对象:使用hashCode()方法的结果或如果为0 f == null;
- 如果字段f是一个数组:请将每个字段视为单独的元素,并以递归方式计算哈希值,然后组合值,如下所述。
- 将哈希值
c
与result
:
result = 37 * result + c
- 返回
result
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)