鍍金池/ 教程/ Java/ Java哈希編碼
Java參數(shù)傳遞
Java靜態(tài)內(nèi)部類
Java final關(guān)鍵字
http://www.yiibai.com/java_object_oriented_design/java_inheritan
Java泛型類
Java標(biāo)準(zhǔn)注解
Java接口教程
Java注解
Java枚舉類型
http://www.yiibai.com/java_object_oriented_design/java_class_ins
Java接口實(shí)現(xiàn)
Java哈希編碼
Java泛型約束
http://www.yiibai.com/java_object_oriented_design/java_import.ht
Java注解默認(rèn)值
Java異常拋出
Java不可變對(duì)象
Java類基礎(chǔ)
Java接口繼承
Java類方法
Java訪問(wèn)級(jí)別
Java對(duì)象克隆
Java初始化塊
Java可變長(zhǎng)度參數(shù)
Java接口字段
Java對(duì)象相等比較(Equals)
Java實(shí)例和靜態(tài)方法
Java繼承方法隱藏(覆蓋)
Java面向?qū)ο笤O(shè)計(jì)
Java對(duì)象finalize()方法
Java抽象類和方法
Java Object類
Java泛型方法和構(gòu)造函數(shù)
Java枚舉體
Java接口方法
Java this關(guān)鍵字
Java注解類型的限制
Java main()方法
Java Enum類
Java注解用法
Java枚舉比較
Java注解類型
Java內(nèi)部類成員
Java繼承和構(gòu)造函數(shù)
Java類實(shí)例化
Java內(nèi)部類類型
Java對(duì)象toString()方法
Java finally塊
Java繼承教程
Java自定義異常
Java枚舉值
Java接口作為類型
Java異常類
Java方法覆蓋教程
http://www.yiibai.com/java_object_oriented_design/java_class_bas
Java枚舉方法
Java方法重載
http://www.yiibai.com/java_object_oriented_design/java_interface
Java異常用法
Java內(nèi)部類
Java類成員訪問(wèn)級(jí)別
Java異常處理教程
Java注解反射
Java構(gòu)造函數(shù)(構(gòu)造器)
Java導(dǎo)入(import語(yǔ)句的用法)

Java哈希編碼

對(duì)象的哈希代碼

哈希碼(也叫散列碼)是一個(gè)整數(shù)值。計(jì)算整數(shù)的算法稱為散列函數(shù)。Java使用散列碼從基于散列的集合中有效地檢索數(shù)據(jù)。Object類有一個(gè)返回inthashCode()方法,它是對(duì)象的哈希碼。
該方法的默認(rèn)實(shí)現(xiàn)通過(guò)將對(duì)象的內(nèi)存地址轉(zhuǎn)換為整數(shù)來(lái)計(jì)算對(duì)象的哈希碼。下面是我們?cè)陬愔兄貙?xiě)hashCode()方法時(shí)必須遵循的規(guī)則。
假設(shè)有兩個(gè)對(duì)象引用,xy。

如果x.equals(y)返回truex.hashCode()必須返回一個(gè)整數(shù),它等于y.hashCode()。
如果兩個(gè)對(duì)象使用equals()方法相等,則它們必須具有相同的哈希碼。
如果x.hashCode()等于y.hashCode(),則x.equals(y)不必返回true。
如果對(duì)同一個(gè)對(duì)象多次調(diào)用hashCode()方法,則該方法必須返回相同的整數(shù)值。

如果一個(gè)類覆蓋這兩個(gè)方法中的任何一個(gè),它必須基于散列集合覆蓋該類的對(duì)象以保證能正確工作。Java 7添加了一個(gè)實(shí)用程序類java.lang.Objects。 它包含一個(gè)hash()方法,用于計(jì)算任意數(shù)量值的哈希碼。從java 7,使用Objects.hash()方法來(lái)計(jì)算對(duì)象的哈希碼。

實(shí)例

以下代碼顯示如何計(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;
  }
}