Java哈希編碼
對象的哈希代碼
哈希碼(也叫散列碼)是一個整數值。計算整數的算法稱爲散列函數。Java使用散列碼從基於散列的集合中有效地檢索數據。Object類有一個返回int的hashCode()方法,它是對象的哈希碼。
該方法的默認實現通過將對象的內存地址轉換爲整數來計算對象的哈希碼。下面是我們在類中重寫hashCode()方法時必須遵循的規則。
假設有兩個對象引用,x和y。
如果x.equals(y)返回true,x.hashCode()必須返回一個整數,它等於y.hashCode()。
如果兩個對象使用equals()方法相等,則它們必須具有相同的哈希碼。
如果x.hashCode()等於y.hashCode(),則x.equals(y)不必返回true。
如果對同一個對象多次調用hashCode()方法,則該方法必須返回相同的整數值。
如果一個類覆蓋這兩個方法中的任何一個,它必須基於散列集合覆蓋該類的對象以保證能正確工作。Java 7添加了一個實用程序類java.lang.Objects。 它包含一個hash()方法,用於計算任意數量值的哈希碼。從java 7,使用Objects.hash()方法來計算對象的哈希碼。
實例
以下代碼顯示如何計算哈希值。
class Book {
private String title;
private String author;
public int hashCode() {
int hash = 37;
int code = 0;
// Use title
code = (title == null ? 0 : title.hashCode());
hash = hash * 59 + code;
// Use author
code = (author == null ? 0 : author.hashCode());
hash = hash * 59 + code;
return hash;
}
}