Это будет работать:
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
.
Не уверен, как вы это делаете и на какой версии java u r это делать. но он отлично работает на java8u51. проверьте его здесь 'https: // ideone.com/XEd0rf' –
Я не использую java, я использую Обработку – Unton4ik