2012-06-11 18 views
-1

可能重複:
Hashcode and equals什麼是平等和hascode,以及如何與收集..?

我看了一下hashcode許多文章和等於及其相互關係的船。 到目前爲止,我的理解是每個object都具有等於和hashcode的功能默認.As java class有這些功能。 現在hashcode表示它返回一個對象的內存地址。 hashcodes默認是唯一的。當一個對象被創建時,你將得到一個唯一的代碼。

  • 現在我的問題是,當你overrideequals功能按 規則,我們需要重寫hashcode功能..?
  • 因此,我們實現了hashcode函數以及等於 方法,但hascode實現是沒有用的。
  • 而且hashcode如何在hashmap使用和 collection框架hashtable ..?

    class person{ 
    
        string name; 
    
        string employer; 
    
        boolean equals(Object o){ 
         person per=(person)o; 
         if(per.employer==this.employeer){  
          return true 
         } 
         return false; 
        } 
    
        int hashcode(){ 
    
         return 0;//what ever i do in hashcode does it really effect any thing..as the equals does     
           //the comparison for me and gave me the result  
        } 
    
    } 
    

hascodes如何在hashmap使用和hashtable

感謝,

回答

1

我問了一個非常similar question for C#,我懷疑正確答案大致相同。

我認爲的底線(請參閱我的問題的一些衝突的觀點的答案)是由您的應用程序域決定與另一個對象具有完全相同屬性的對象是否意味着它們「相等」,或者兩個具有不同地址(但屬性值完全相同)的對象是否不相等。

我會傾向於保留更常見的定義,即具有相同屬性值但不同地址的對象實際上是不同的。如果您覺得您需要使用其他定義,那麼團隊中的每個人都必須非常清楚:a)這是慣例,b)爲什麼這是慣例,或者很可能會出現錯誤的錯誤。

此外,對象集合(例如字典)中參與依賴於哈希碼找到該對象的任何時間,散列代碼必須穩定的時間的持續時間,該對象參與該集合

相關問題