数组 ArrayList 中元素的索引

Index of an element in ArrayList of arrays

我有一个双元素数组列表,如下所示:

ArrayList<int[]> list = new ArrayList<int[]>();

我可以使用 list.get() 从此列表中获取元素,但尝试获取已知元素的索引不起作用:

int[] array = list.get(0); //returns an array
int index = list.indexOf(array); //returns -1

我正在使用 Processing 3.2.1
我做错了什么?

这会起作用:

ArrayList<int[]> list = new ArrayList<int[]>();
list.add(new int[]{1, 2});

int[] array = list.get(0);

int index = list.indexOf(array); 
println(index);

这不会:

ArrayList<int[]> list = new ArrayList<int[]>();
list.add(new int[]{1, 2});

int[] array = new int[]{1, 2};

int index = list.indexOf(array); 
println(index);

indexOf()函数使用equals()函数来判断一个对象是否等于每个索引处的一个元素。不幸的是,数组的行为并不像您预期​​的那样,因此具有相同元素的两个不同数组不相等!

int[] arrayOne = {1, 2};
int[] arrayTwo = {1, 2};
println(arrayOne.equals(arrayTwo));

这是因为数组使用实例相等,所以数组只有在完全相同的数组时才相等!这就是为什么第一个代码块有效,但第二个代码块无效的原因。

解决这个问题的一种方法是创建一个包含数组的包装器对象,然后覆盖 equals() 函数以实际比较数组中的元素。但是既然你的数组只有两个索引,你为什么不创建一个有两个变量的 class,然后覆盖 equals 函数呢?或者只使用 PVector 实例。