2011-09-21 69 views
1

在java中,這裏有一個catch。對象已經被編譯,因此hash()和equals()方法不能被覆蓋。把它放到一個集合中,然後回到列表中將不起作用,因爲唯一性標準當前沒有在equals()中定義,並且這不能被覆蓋。刪除對象列表中的重複項而不依賴於集合

+0

你在'equals()'方法中沒有定義'唯一性'的標準是什麼? – Atreys

回答

3

你應該仍然能夠創建子類並創建equalshashcode工作的方法,除非類/方法是final

如果是這種情況,您可以使用組合,基本上爲您要放入集合的東西創建一個包裝,並讓包裝的equalshashcode正確地實現合同,以包裝物件。

你處於困境中,因爲我正在閱讀的是原始類沒有遵循equalshashcode的合約,這在Java中是一個真正的問題。這是一個非常嚴重的錯誤。

+0

有時哈希碼變得棘手/昂貴... –

+0

當然,但它仍然必須是正確的。 – hvgotcodes

+0

問題是如果比較便宜,TreeSet方法可能會更好。原來的問題並沒有說有什麼好的哈希碼。 –

1

爲您的物品寫一個自定義Comparator並使用Collections.sort()對您的物品進行分類。然後通過查看循環中的列表來刪除重複項。

+1

...或者使用'Comparator'和'TreeSet' –

1

a compareTo方法將返回-10,1;如果0,請從列表中刪除。