Fin*_*005 3 java set duplicates hashset
我有一个Set对象,我使用这个集合来确保当我向它添加一个已经存在于集合中的元素时,它不会被添加.这是一个简单的部分,只需使用Set.add();但是在完成之后我需要引用Set中的对象.
我的本质意思是有一个.add()不返回布尔值,但是你试图添加的实际对象(如果它没有添加,则是集合中的那个).是否已经有一个Set实现来执行此操作,还是我必须自己编写?
目前我使用了a Set.add(),如果它返回false,我使用迭代器来查找集合中的那个.虽然这有效,但我发现它很难看.特别是当使用HashSet实现时,它应该能够使用哈希码更快地找到对象.有任何想法吗?
编辑:哇,在相对较短的时间内有很多答案,谢谢.好吧,所以我要做的是创建一个特定的数据结构,从某个地方加载数据并从中创建对象.这个数据可能包含重复项,如果我使用了一个集合并且只需要这个集合就不会有问题,但是数据结构需要将对这些唯一对象的引用添加到数据结构中的其他对象,因此我需要引用集合中的(唯一)对象.此外,我不能只是不加载已经包含在集合中的数据,因为还有更多(唯一)链接到它的数据,这些数据也被添加,同时还包含对集合中已包含的数据的引用.为了便于说明(因为上面的解释还不清楚),我将在这里给出一个例子:
数据:
foo bar 1 3 1 4 2 5
数据结构:
Set<Foo> totalFooSet
Set<Bar> totalBarSet
Run Code Online (Sandbox Code Playgroud)
富:
sometype data
Set<Bar> barSet
Run Code Online (Sandbox Code Playgroud)
酒吧:
sometype data
Set<Foo> fooSet
Run Code Online (Sandbox Code Playgroud)
这有点像多对多的关系.
我不确定这里是否存在一些重大的设计缺陷,我已经和其他人一起看过了,我们无法弄清楚如何以不同的方式做到这一点.我喜欢使用HashMap的想法,所以我将创建一个子类并向其添加addAndReturn()函数.
(正如@AlexR所说,我假设您希望引用前一个对象,该引用等于您现在要添加的对象)
不要使用Set,而是尝试使用具有与键和值相同的对象的HashMap.然后,您可以执行以下操作:
Foo objectToAdd = //obtained the normal way
Map<Foo,Foo> psuedoSet = //this is stored somewhere
Foo result = psuedoSet.get(objectToAdd);
if (result == null) {
pseudoSet.put(objectToAdd, objectToAdd);
result = objectToAdd;
}
return result;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |