【发布时间】:2017-02-19 17:30:57
【问题描述】:
我有 3 个列表,其中两个是重复的。我想将这些列表存储到一个单元中,删除所有重复项,所以我想将每个列表添加到一个集合中。这是我尝试过的:
List<Integer> coins1 = Arrays.asList(5, 5, 10);
List<Integer> coins2 = Arrays.asList(5, 10, 5);
List<Integer> coins3 = Arrays.asList(10, 10);
coins1.sort((a, b) -> a.compareTo(b));
coins2.sort((a, b) -> a.compareTo(b));
coins3.sort((a, b) -> a.compareTo(b));
Collection<List<Integer>> allCoinPossibilities = new TreeSet();
allCoinPossibilities.add(coins1);
allCoinPossibilities.add(coins2);
allCoinPossibilities.add(coins3);
我收到错误消息“java.util.Arrays$ArrayList 无法转换为 java.lang.Comparable”。该错误是有道理的,集合不知道如何比较每个列表以禁止重复。我需要覆盖比较方法吗?如果是这样,我该怎么做?这是解决这个问题的正确方法吗?
谢谢!
【问题讨论】:
-
您可以改用
HashSet,因此没有订购要求。 -
我认为不需要排序,至少 3 次。将一个列表放在一组中。另外两个检查集合。如果值存在则跳过,否则添加到集合。代码在幕后有很多开销
-
我尝试了 allPossibilities.contains(coins) 而不是排序,但这种方法仍然会添加重复项。
-
@efekctive 如果你想使用
equals,你确实需要对它们进行排序,因为它还会检查Lists 的顺序。 -
让我返回代码。现在卡住了
标签: java arraylist collections