2016-09-30 3 views
1

У меня есть список из двух элементов массивов, выглядит следующим образом:Индекса элемента в ArrayList массивов

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

я могу получить элемент из этого списка с помощью list.get(), но при попытке прибудет индекс известного элемента не работает:

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

Я использую Обработку 3.2.1
Что я делаю неправильно?

+0

Не уверен, как вы это делаете и на какой версии java u r это делать. но он отлично работает на java8u51. проверьте его здесь 'https: // ideone.com/XEd0rf' –

+0

Я не использую java, я использую Обработку – Unton4ik

ответ

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.

Смежные вопросы