java - 获取对 Set 中重复项的引用

标签 java set duplicates hashset

我有一个 Set 对象,我使用这个集合来确保当我向它添加一个已经存在于集合中的元素时,它不会被添加。这是简单的部分,只需使用 Set.add(); 但完成后我需要引用 Set 中的对象。

我的本​​质意思是有一个 .add() 不返回 boolean 值,而是您尝试添加的实际对象(如果没有添加,则返回集合中的对象).是否已经有执行此操作的 Set 实现,还是我必须自己编写?

目前我使用了 Set.add(),如果它返回 false,我使用迭代器在集合中寻找那个。虽然这有效,但我觉得它很难看。特别是在使用 HashSet 实现时,它应该能够使用哈希码更快地找到对象。有什么想法吗?

编辑:哇,在相对较短的时间内得到了很多答案,谢谢。好的,所以我想做的是创建一个特定的数据结构,从某个地方加载数据并从中创建对象。该数据可能包含重复项,如果我使用一个集合并且只需要这个集合,这将不是问题,但是数据结构需要将对这些唯一对象的引用添加到数据结构中的其他对象,因此我需要对集合中的(唯一)对象。另外,我不能只是不加载集合中已经包含的数据,因为有更多(唯一的)数据链接到它,这些数据也被添加,连同对集合中已经包含的数据的引用.为了便于说明(因为上面的解释还很不清楚),我在这里举个例子:

数据:

foo     bar
1       3
1       4
2       5

Datastructure:

Set<Foo> totalFooSet  
Set<Bar> totalBarSet

富:

sometype data
Set<Bar> barSet  

酒吧:

sometype data
Set<Foo> fooSet

这有点像多对多关系。

我不确定这里是否存在一些重大的设计缺陷,我已经和其他人一起研究过,但我们想不出如何以不同的方式做到这一点。我喜欢使用 HashMap 的想法,所以我将创建一个子类并向其添加一个 addAndReturn() 函数。

最佳答案

(正如@AlexR 所说,我假设您希望对上一个 对象的引用等于您现在尝试添加的对象)

尝试使用具有相同对象作为键和值的 HashMap,而不是使用 Set。然后您可以执行以下操作:

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;

关于java - 获取对 Set 中重复项的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9190470/

相关文章:

java - 为什么类中的静态方法在其对象为空时不会给出空指针异常

python - 计算两个没有相同索引元素的列表的笛卡尔积

javascript - 是否有接受任何对象类型的哈希码函数?

c++ - 如何获得两个 std::map 的公共(public)键?

java - 对于Integer类型变量, '='运算符是否等于值或引用?

java - 部署后未找到 jdbc mysql 驱动程序

python - 使用 apply 删除组中的重复项

c# - 如何使用 C# 消除数据表中的重复条目?

java - Windows Server 2008 R2 的 Tomcat 7.0 HTTP post 请求 utf-8 问题

mysql - 删除重复的行,除了一个,** 其中行包含 NULL 值 **