包含值的整数数组列表 ArrayList<int[]>

4
如果我有一个ArrayList<int[]>例子,我想检查其中是否包含{2,4},我该怎么做?
exaple.contains({2,4}); //doesn't work

并且

exaple.contains(2,4); //doesn't work either

代码有什么问题?

1
exaple.contains(new int[]{2,4}); 测试一下。 - Marco Acierno
1
@MarcoAcierno 这样做不起作用,因为比较将在地址上进行,而不是在内容上进行。 - giorashc
1
从语法上讲,.contains(new int[]{2,4}) 是正确的。然而,它并不会成功,因为这个新数组不等于列表中的任何一个数组。 - Mattias Buelens
@giorashc 是的,我只是说如何修复错误。否则我会发帖回复的。 - Marco Acierno
4个回答

11

数组不会覆盖Object.equals()方法(ArrayList.contains()用于比较对象的方法)。因此,一个数组只等于它本身。你需要循环遍历列表,并使用Arrays.equals()比较每个元素与你的数组。

但我怀疑你不应该有一个List<int[]>,而是应该有一个List<Coordinate>。Coordinate类可以重写equals()hashCode()方法,这样你就可以使用

example.contains(new Coordinate(2, 4))

您也可以使用 List<List<Integer>>,但如果我怀疑的是正确的(即您正在使用数组来保存应该在类中的两个坐标),那么请使用自定义 Coordinate 类。


1
@JB Nizet 很棒的答案,解释得非常清楚! - Keerthivasan

0

即使您已经正确地完成了它,例如:

int[] vals = {2, 4};

exaple.contains(vals);

你不会返回 true,因为 contains 方法将使用 equals 方法。除非你已经重写了 equals 方法,否则这将始终解析为 false,除非你传入完全相同的数组。

0

0

contains()方法用于检查ArrayList是否包含特定对象,它不关心对象内部的值。换句话说,如果你实例化了两个数组{2,4},它们将是两个不同的对象,contains()方法会区分它们。

你需要做的是要么重写contains()方法,使其查找数组的内容而不仅仅是引用,要么完全放弃contains()方法并手动检查。


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