java 中 HashSet 中的 Arrays.asList [已关闭]

Arrays.asList in HashSet in java [closed]

提问人:stallion 提问时间:11/14/2023 最后编辑:khelwoodstallion 更新时间:11/14/2023 访问量:66

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答这个问题。

5天前关闭。

我必须收集一个整数列表,并确保其中没有重复项。

我正在使用哈希集来确保该列表中没有重复项。

基本上

Set<List<Integer>> set = new HashSet<>();
List<List<Integer>> list = new ArrayList<>();

我看到,如果我将列表放在 HashSet 中,HashSet 将确保另一个包含内容的列表不会出现在集合中。但是如果我把它作为一个新的List对象,基本上Arrays.asList(1,2,3)1,2,3

List<Integer> temp = new ArrayList<Integer>()
temp.add(1);
temp.add(2);
temp.add(3);

set 允许重复列表。

有了这个,我明白 Set 在列表的情况下会进行对象比较,而不是值比较。它是如何工作的,以确保集合中没有重复项?Arrays.asList(1,2,3)

Java 数组等于 哈希集

评论

2赞 khelwood 11/14/2023
不,hashset 会比较对象之间的值。你的问题取决于你如何使用它。在将数组列表放入集合后,您是否对其进行了更改?因为这肯定会破坏布景的机制。ArrayList<Integer>
0赞 Thiyagu 11/14/2023
在将对象添加到 Set 中后,您正在对其进行更改。A 使用 .将元素添加到 Set 后,如果它发生突变(这会影响 equalshashCode),则 HashSet 无法对内部 HashMap 中的对象重新排序/重新映射。HashSetHashMap<E, Object>
1赞 Thiyagu 11/14/2023
请参见: Java 集中对象的可变字段
1赞 Thiyagu 11/14/2023
底线:切勿以影响其等于hashCode 结果的方式改变已添加到 HashMap/HashSet 的对象。

答: 暂无答案