2010-04-10 49 views
4

我需要一个HashSet实现,其中的元素是一个整数
例如。 Set s = { {1,2} , {3,4} , {1,4}}。这里的集合有3个元素。两个关键HashSet?

这种两个关键的HashSet在很多情况下都是需要的,比如我在我的数据库中有一个关系,候选关键字是两列的组合。
是否有一些库已经提供了这个? 如果没有这样的实现可用,那么从头开始实现整个数据结构,是否会更容易(并且更高效?)在Java中扩展HashSet实现?

+0

由于Adamski提出的观点,使用'HashSet '没有帮助。因此,创建了一个数据持有者的整数列表,并提供了equals和hashcode实现。 – athena 2010-04-13 11:36:33

回答

8

对于这个要求,我会创建一个数据持有者与2个整数作为属性,并提供equals和hashcode实现。然后把这些对象放在Set中。

1

将它作为一个成员的2个元素放置数组?即:

Set<int[]> s = new HashSet<int[]>(); 
s.add(new int[] {1,2}); 
s.add(new int[] {3,4}); 

或创建一个类CandidateKey其中有两个字段和一个自定义equals()hashCode()方法?

这一切都说,你确定要自己处理对象关系映射(从数据库到对象的映射),而不是像Hibernate或EclipseLink这样的库?

+2

这实际上工作吗?我会认为数组的默认equals和hashCode实现是基于身份的。 – Adamski 2010-04-10 10:34:20

+0

他们是,但在某些情况下,这可能就足够了 - 我不知道他是否是这样。这就是为什么要添加关于一个新类的建议,其中equals和hashcode正确执行。 – Bozho 2010-04-10 10:39:44

+0

拟议的int []解决方案有一个限制。没有什么能够阻止你添加包含更少或更多元素的数组,例如int [] empty = new int [0];或者int [] triple = new int [] {1,2,3} ;. – matsev 2010-04-10 15:12:36