Java HashCode(哈希碼)

2018-01-18 17:42 更新

Java面向?qū)ο笤O(shè)計(jì) - Java哈希碼

Object的哈希碼

哈希碼是一個(gè)整數(shù)值。計(jì)算整數(shù)的算法稱(chēng)為散列函數(shù)。

Java使用散列碼從基于散列的集合中有效地檢索數(shù)據(jù)。

Object類(lèi)有一個(gè)返回int的hashCode()方法,它是對(duì)象的哈希碼。

該方法的默認(rèn)實(shí)現(xiàn)通過(guò)將對(duì)象的內(nèi)存地址轉(zhuǎn)換為整數(shù)來(lái)計(jì)算對(duì)象的哈希碼。

下面是我們?cè)陬?lèi)中重寫(xiě)hashCode()方法時(shí)必須遵循的規(guī)則。

假設(shè)有兩個(gè)對(duì)象引用,x和y。

如果x.equals(y)返回true,x.hashCode()必須返回一個(gè)整數(shù),它等于y.hashCode()。

如果兩個(gè)對(duì)象使用equals()方法相等,則它們必須具有相同的哈希碼。

如果x.hashCode()等于y.hashCode(),則x.equals(y)不必返回true。

如果對(duì)同一個(gè)對(duì)象多次調(diào)用hashCode()方法,則該方法必須返回相同的整數(shù)值。

如果一個(gè)類(lèi)覆蓋這兩個(gè)方法中的任何一個(gè),它必須覆蓋該類(lèi)的對(duì)象在基于散列的集合中正確工作。

Java 7添加了一個(gè)實(shí)用程序類(lèi)java.lang.Objects。它包含一個(gè)hash()方法,用于計(jì)算任意數(shù)量值的哈希碼。

從java 7,使用Objects.hash()方法來(lái)計(jì)算對(duì)象的哈希碼。

例子

以下代碼顯示如何計(jì)算哈希值。

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;
  }
}


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)