淺析Java hashCode()方法


  散列碼(hash code)是由對象導出的一個整數值

  散列碼沒有規律,兩個不同的對象x和y,x.hashCode()與y.hashCode()基本上不會相同。

1 public static void main(String[] args) {
2         String str1 = "HELLO WORLD!";
3         String str2 = "hello world!";
4         System.out.println(str1.hashCode());
5         System.out.println(str2.hashCode());
6     }

  上面的代碼輸出兩個字符串的散列碼:

 

String 類中計算散列碼的源碼如下:

 

 

  可以看出,字符串的散列碼是由內容導出的


 

  Object類是所有類的父類,hashCode()方法定義在Object類中,因此每一個類都有一個默認的計算對象散列碼的方法,

使用默認的方法計算對象的散列碼得到的值是對象的存儲地址。

 

  如果在子類中重新定義equals()方法,必須重新定義hashCode()方法,如果x.equals(y)放回true,那么x.hashCode()就必須與y.hashCode()具有相同的值。

例如Student.equals()通過學生ID比較對象,那么hashCode()就需要基於ID生成散列碼。

 

  hashCode()方法應該返回一個整數值(可以是負數),並合理地組合實體域的散列碼,以便讓各個不同的對象產生的散列碼分布的更加均勻。

  一個比較好的生成方法是:

 

  調用Objects.hash()方法,這個方法會對各個參數調用Objects.hashCode()方法,然后組合各個參數的散列值。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM