数组ArrayList中元素的索引

时间:2016-09-30 11:19:21

标签: arrays arraylist processing

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

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
我做错了什么?

1 个答案:

答案 0 :(得分:0)

这将有效:

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()函数以实际比较数组中的元素。但是,由于您的数组只有两个索引,为什么不创建一个包含两个变量的类,然后重写equals函数?或者只使用PVector实例。