数组 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
实例。
我有一个双元素数组列表,如下所示:
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
实例。