如何在元素为数组的列表中去除重复项?

4
为什么这段Java代码会返回false
List list = new ArrayList();
int[][] arr = {{-1, -1, 2}, {-1, 0, 1}};
list.add(arr[0]);
list.add(arr[1]);
int[] temp = {-1, 0, 1};
return list.contains(temp);

当列表中的元素是数组时,我该如何删除重复项呢?

感谢您的回复。


如果你真的想让contains方法起作用,你需要在自定义数组列表上使用comparable接口。而对于重复项,你需要创建一个新列表并循环遍历旧列表或将所有内容放入哈希表中。 - Ya Wang
1个回答

4

数组不会覆盖 Objectequals 实现,因此,由于 list.contains() 使用 equals 来确定元素是否出现在 List 中,它将仅在您搜索添加到 List 中的确切数组对象时返回 true。因此,list.contains(arr[1]) 将返回 true,但是 list.contains(temp) 不会返回 true,因为 temparr[1] 是不同的对象(尽管它们包含完全相同的元素)。

您可以使用 List<List<Integer> 而不是 List<int[]>,以便 list.contains() 按照您的期望进行操作(因为 List 接口的常见实现确实覆盖了 Objectequals)。


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