我需要一个HashSet实现,其中的元素是一个整数
例如。 Set s = { {1,2} , {3,4} , {1,4}}
。这里的集合有3个元素。两个关键HashSet?
这种两个关键的HashSet在很多情况下都是需要的,比如我在我的数据库中有一个关系,候选关键字是两列的组合。
是否有一些库已经提供了这个? 如果没有这样的实现可用,那么从头开始实现整个数据结构,是否会更容易(并且更高效?)在Java中扩展HashSet实现?
我需要一个HashSet实现,其中的元素是一个整数
例如。 Set s = { {1,2} , {3,4} , {1,4}}
。这里的集合有3个元素。两个关键HashSet?
这种两个关键的HashSet在很多情况下都是需要的,比如我在我的数据库中有一个关系,候选关键字是两列的组合。
是否有一些库已经提供了这个? 如果没有这样的实现可用,那么从头开始实现整个数据结构,是否会更容易(并且更高效?)在Java中扩展HashSet实现?
对于这个要求,我会创建一个数据持有者与2个整数作为属性,并提供equals和hashcode实现。然后把这些对象放在Set中。
将它作为一个成员的2个元素放置数组?即:
Set<int[]> s = new HashSet<int[]>();
s.add(new int[] {1,2});
s.add(new int[] {3,4});
或创建一个类CandidateKey
其中有两个字段和一个自定义equals()
和hashCode()
方法?
这一切都说,你确定要自己处理对象关系映射(从数据库到对象的映射),而不是像Hibernate或EclipseLink这样的库?
这实际上工作吗?我会认为数组的默认equals和hashCode实现是基于身份的。 – Adamski 2010-04-10 10:34:20
他们是,但在某些情况下,这可能就足够了 - 我不知道他是否是这样。这就是为什么要添加关于一个新类的建议,其中equals和hashcode正确执行。 – Bozho 2010-04-10 10:39:44
拟议的int []解决方案有一个限制。没有什么能够阻止你添加包含更少或更多元素的数组,例如int [] empty = new int [0];或者int [] triple = new int [] {1,2,3} ;. – matsev 2010-04-10 15:12:36
由于Adamski提出的观点,使用'HashSet'没有帮助。因此,创建了一个数据持有者的整数列表,并提供了equals和hashcode实现。 –
athena
2010-04-13 11:36:33