删除包含数组的列表中的副本

时间:2013-05-01 10:35:04

标签: java arrays list

我在Java中有list<array[]>,我想从中删除所有重复项。

此外,数组[1,2]与数组[2,1]相同。

我想使用Set,但据我所知,如果我声明2个数组:int[] array1 = {1, 2}int[] array2 = {1,2},Java会将它们视为2个不同的数组。另外,对于[1,2][2,1]

,它对我没有帮助

我该怎么做?

4 个答案:

答案 0 :(得分:1)

我没有经过测试,但您可以在添加到set

之前对数组进行排序
int[] array1 = {1, 2};
Arrays.sort(array1);
set.add(array1);

答案 1 :(得分:0)

使用HashSet,然后将当前列表的所有内容添加到其中。然后使用.toArray()方法返回列表。

HashSet<Integer> noDuplicates = new HashSet<Integer>();
Integer[] array = { 1, 2, 2, 3, 3, 4, 1};
System.out.println(Arrays.toString(array));
for (Integer i : array)
  noDuplicates.add(i);
array = noDuplicates.toArray(new Integer[] {});
System.out.println(Arrays.toString(array));

如果你必须检查两个阵列是否经常相同,那么你可能只想使用一个Set而不是一个数组,因为它会为你节省额外的步骤,将所有内容放入一个Set然后检查。

答案 2 :(得分:0)

  1. 使用Iterator来迭代list
  2. 使用Arrays.equals(arg0, arg1)方法比较list内的数组。
  3. 如果您发现使用iterator.remove()删除了相同的数组。

答案 3 :(得分:0)

List<int[]> b = new ArrayList<int[]>(); // Your list here
for (int[] ar : b) {
    Arrays.sort(ar);
}
Set<int[]> a = new HashSet<>(b);