通用的Java hashCode重写方案
生活随笔
收集整理的這篇文章主要介紹了
通用的Java hashCode重写方案
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://my.oschina.net/chihz/blog/56256
public static int hashCode(long a[]) {if (a == null)return 0;int result = 1;for (long element : a) {int elementHash = (int)(element ^ (element >>> 32));result = 31 * result + elementHash;}return result; }
Arrays.hashCode(...)只會計算一維數組元素的hashCOde,如果是多維數組,那么需要遞歸進行hashCode的計算,那么就需要使用Arrays.deepHashCode(Object[])方法。
3. 最后,要如同上面的代碼,把每個域的散列碼合并到result當中:result = 31 * result + elementHash; 4. 測試,hashCode方法是否符合文章開頭說的基本原則,這些基本原則雖然不能保證性能,但是可以保證不出錯。
3. 為什么是31? 31是個神奇的數字,因為任何數n * 31就可以被JVM優化為 (n << 5) -n,移位和減法的操作效率要比乘法的操作效率高的多。
總結
以上是生活随笔為你收集整理的通用的Java hashCode重写方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HashSet.contains
- 下一篇: MapReduce源码分析总结