如果我有ArrayList<int[]>
示例,并且我想检查{2,4}是否在其中,我将如何执行此操作?
exaple.contains({2,4}); //doesn't work
和
exaple.contains(2,4); //doesn't work either
代码有什么问题?
答案 0 :(得分:11)
数组不会覆盖Object.equals()
方法(ArrayList.contains()
用来比较对象)。所以数组只等于它自己。您必须遍历列表并使用Arrays.equals()
将每个元素与数组进行比较。
但我怀疑,你不应该有List<int[]>
,而是List<Coordinate>
。然后,坐标类可以覆盖equals()
和hashCode()
,您就可以使用
example.contains(new Coordinate(2, 4))
您也可以使用List<List<Integer>>
,但如果我怀疑是真的(即您使用数组来保存应该在课堂上的两个坐标),那么请使用自定义的Coordinate类。
答案 1 :(得分:0)
即使你做得恰当,即:
int[] vals = {2, 4};
exaple.contains(vals);
您不会返回true,因为contains
方法将使用equals
方法。除非您已覆盖equals
方法,否则这将始终解析为false
,除非您传入完全相同的数组。
答案 2 :(得分:0)
你可能想看看这个。请发一些你的代码。
答案 3 :(得分:0)
contains()
方法检查,如果ArrayList
包含特定对象,则它不关心对象内的值。换句话说,如果您实例化两个{2,4}数组,它将是两个不同的对象,contains()
方法将在它们之间区分。
您需要做的是覆盖contains()
方法以查看数组的内容,而不是仅查看引用,或者您可以删除完全使用contains()
方法并手动检查。