Java中唯一列表的列表

3
我需要在Java中创建一组唯一的集合。请问有哪些可能的容器可以使用?
我想要类似于`List>`这样的东西,其中每个列表都可以重复其内容。
例如,如果我的父列表的当前状态是`[[1,2,3],[3,4,5],[4,5,6]]`,如果我想添加另一个列表`[3,4,5]`,则不应重复并且不应添加。
`List`的`contains()`方法适用于整数、浮点数等,但我不确定它能否匹配列表。
请建议其他可帮助的容器。
谢谢。

8
请使用Set而不是List。 - Chandra Sekhar
2个回答

4
您最好使用Set<List<Integer>>而不是List<List<Integer>>
以上适用于您的示例:
Set<List<Integer>> uniqueLists = new HashSet<>();
uniqueLists.add(Arrays.asList(1, 2, 3));
uniqueLists.add(Arrays.asList(3, 4, 5));
uniqueLists.add(Arrays.asList(4, 5, 6));

// Now, this won't be added:
uniqueLists.add(Arrays.asList(3, 4, 5));

但是,当你将一个集合放到集合中时要小心。在将其放入集合后,不应再更改它。


我不明白。这个集合不会添加第二个 3, 4, 5 吗?因为它是与第一个 3, 4, 5 不同的对象。 - Matt
1
@MattD:Arrays.ArrayList 根据其内容实现了 equals()hashCode()。试试看吧。 - Lukas Eder
如果您添加一个不同的顺序,例如4、3、5,会发生什么? - old_soul_on_the_run
@goyalshub1509:那不是和3,4,5相同的列表。如果你想让它们成为同一个集合,使用集合。 - Lukas Eder

2
也许你会对使用Set<Set<Integer>>感兴趣。
如果你想维护添加顺序,可以使用LinkedHashSet
你的代码将会是这样的:
Set<Set<Integer> uniqueLists = new LinkedHashSet<Set<Integer>>();

uniqueLists.add(new LinkedHashSet(Arrays.asList(1, 2, 3)));

这将避免使用 Set<List<Integer>> 时出现的两个问题:
1)它会保留各个列表的添加顺序
2)每个单独的列表中也不会有重复的整数条目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接