天天看點

Java如何計算hashcode值

在設計一個類的時候,很可能需要重寫類的hashcode()方法,此外,在集合hashset的使用上,我們也需要重寫hashcode方法來判斷集合元素是否相等。

下面給出重寫hashcode()方法的基本規則:

· 在程式運作過程中,同一個對象多次調用hashcode()方法應該傳回相同的值。

· 當兩個對象通過equals()方法比較傳回true時,則兩個對象的hashcode()方法傳回相等的值。

· 對象用作equals()方法比較标準的field,都應該用來計算hashcode值。

下面給出hashcode()方法的一般規則:

1) 把對象内每個有意義的field計算出一個int類型的hashcode值:

boolean

hashcode=(f?0:1)

整數類型(byte  short   int  char)

hashcode=(int)f

long

hashcode=(int)(f^(f>>>32))

float

hashcode=float.floattointbits(f)

double

long l = double.doubletolongbits(f);

hashcode=(int)(l^(l>>>32))

普通引用類型

hashcode=f.hashcode()

2) 用第一步計算出來的多個hashcode值組合計算出一個hashcode值傳回:

為了避免直接相加産生偶然相等,可以通過為各個field乘以任意一個質數後再相加。

示例: 向hashset集合中添加資料:

通過以上方式,我們可以輕松的去重寫一個類的hashcode()方法。