2009-07-02 159 views
0

關於這個問題(Efficient hashCode() implementation)我還有一個問題。哈希碼實現

我有一個「價值」類,哪些實例是持久化在數據庫中。因此這個類的實例都有一個唯一的ID。

因此,我簡單地通過返回這個id來實現哈希碼方法(和相關的equals方法)。

當使用Eclipse哈希碼生成器,並告訴Eclipse中只使用ID屬性的一代,我有以下方法:

@Override 
    public int hashCode() { 
      final int prime = 31; 
      int result = 1; 
      result = prime * result + id; 
      return result; 
    } 

我想簡單地返回id爲更有效,因爲我知道這個ID是唯一的。我對嗎 ?

在此先感謝

+0

如果結果是1,爲什麼你會因結果而m ly。你的功能實際上是「返回31 + ID;」。 – Tom 2009-07-02 14:26:28

+0

順便說一句,你可能會擺脫31,因爲它不會改變id的分佈。簡而言之,你實現的hashcode沒有做任何特殊的事情,你應該只返回id。話雖如此,我不確定什麼是「更好」。 – Tom 2009-07-02 14:28:12

回答

5

這不是ID的唯一性,這使得這是正確的事情 - 這是事實,這是用於平等檢查,它是只有東西用於相等性檢查。

來自Eclipse的樣板實際上只有在您使用多個字段進行平等時纔有意義。

3

如果你的目標身份的獨特性則絕對是的。

請記住,由於您可能(可能)不是通過散列函數的可能範圍(即int的所有值)隨機分佈值,因此性能可能成爲任何依賴散列的代碼的問題均勻分佈。

P.s.這「可能」來自我的假設,這些獨特的整數可能是你的數據庫中的身份值。如果他們真的是隨機分佈的,請忽略我的警告。

+0

是的,這當然是我的目標。謝謝 – 2009-07-02 14:18:28