2014-01-05 47 views
3

我的程序創建自定義對象,我想獲得一個清晰的列表。所以我想使用一個集合並按對象添加對象。該集會防止重複。最後我有一組獨特的對象。HashSet限制 - 如何繼續?

我通常會使用HashSet,因爲我不需要一個有序集合。只有很多不同的潛在對象。超過2^32。 GetHashCode函數返回一個int,所以這不能作爲我的對象的唯一鍵。

我假設我不能使用HashSet因此必須使用較慢的SortedSet並讓我的對象實現IComparable/CompareTo。它是否正確?或者有沒有辦法讓哈希集具有長哈希代碼?

+0

HashSet不能包含超過2^31個項目。這也會限制你。 – usr

回答

7

GetHashCode確實會返回一個int,但如果哈希代碼的比較結果確定它們是相同的,它將通過調用Equals方法(您應該重寫)來回答。

所以,不,你不必切換。你可以繼續使用舊的可愛HashSet(只要你沒有用完內存)。

+1

哈希碼不需要是唯一的,這就是哈希的全部內容。創建哈希代碼爲大對象創建小標識符,顯然永遠不會爲所有可能的對象狀態創建唯一的代碼。 – PMF

+0

@ I3arnon:非常感謝您提供簡單明瞭的解釋。 –

+0

@ThorstenKettner當然可以。 – i3arnon