如何在元素是数组时删除列表中的副本?

时间:2017-03-05 14:35:15

标签: java

为什么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);

当列表中的元素是数组时,如何删除副本?

感谢您的回复。

1 个答案:

答案 0 :(得分:4)

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

您可以使用List<List<Integer>代替List<int[]>,以使list.contains()按预期运行(因为List接口的常见实现会覆盖{{ 1}}&#39; s Object)。