我有一類人,其中包含兩個字段,年齡(INT),並名稱(字符串)。在eclipse中,我重寫了hashCode()和等於()方法與這兩個字段。我還創建了一個比較器基於年齡字段。Java的設置不能區分不同對象
現在,我創建一個比較的年齡一個TreeSet的對象,也人類的兩個實例(具有不同字段的值)。然後我將這兩個對象添加到集合中,但是,集合中總是隻有一個對象。
爲了解這個問題,我打印出這兩個對象的散列值,發現它們是不同的。然後,我測試他們的等於()方法,它確實輸出錯誤當我比較具有不同字段值的兩個實例。所以現在,我不知道爲什麼TreeSet無法處理(區分)的問題。任何人都可以給我一些幫助嗎?非常感謝 !
是的,有斑點。在你的compareTo()方法中使用這兩個字段。你想按年齡排序,所以在年齡內按名字排序,然後2個相同年齡的名字仍然會被正確排序,但不會被認爲是平等的(即你的compareTo將與等號一致)。 – MattR 2012-07-12 14:16:59
但是在Java文檔中,** Comparator **接口只有** compare()**方法,而不是** compareTo()**,不是嗎? – 2012-07-12 14:21:53
是的。但是,如果您的對象實現了Comparable,則不需要將比較器傳遞給TreeSet的構造函數。在這種情況下,TreeSet將使用它們的「compareTo」方法比較對象。 – 2012-07-12 14:24:22