Java雜湊編碼


物件的雜湊程式碼

雜湊碼(也叫雜湊碼)是一個整數值。計算整數的演算法稱為雜湊函式。Java使用雜湊碼從基於雜湊的集合中有效地檢索資料。Object類有一個返回inthashCode()方法,它是物件的雜湊碼。
該方法的預設實現通過將物件的記憶體地址轉換為整數來計算物件的雜湊碼。下面是我們在類中重寫hashCode()方法時必須遵循的規則。
假設有兩個物件參照,xy

如果x.equals(y)返回truex.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;
  }
}