2014-01-05 45 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