2016-09-21 112 views
-1

我正在使用名爲Key的類。 它有2個欄位:在Java中用於聯合類似類型的哈希碼

  1. 地址(類型MyAddress),其具有GUID(型長)
  2. ID(型長)

這個類可以具有在任何給定點的一個以下:

  • 地址不爲空和id == - 1個
  • adresss爲空和id> 0

會不會是正確的做到以下幾點:

int hashcode(){ 
    if (address==null) return Long.hashCode(id) 
    else return Long.hashcode(address.guid) 
} 

是否有可能從發生的任何問題? 我主要想確保在任何給定時間只有一個字段是相關的時,這是在類聯合類中生成哈希碼的正確方法。

+0

如果類的實例是不可變的,那就很好了。 –

+0

什麼是equals函數? –

+0

我相信等於將地址爲空,所以與id相比,否則與地址的guid比較。 – slashms

回答

0

哈希碼的要求是兩個相等的對象具有相同的哈希碼。它看起來像你的哈希碼滿足這個,因此是完全有效的。

這就是說,它是更好的做法是所有你equals方法是測試場的結合,並設計在於,假設該對象在HashSet使用這樣的哈希代碼,對象合理均勻分佈始終。 This answer將概述如何做到這一點的一個很好的例子。