2014-11-11 4 views
3

я следующий сегмент кода в Java для Android:Может ли Java ArrayList быть пустым, а indexOf - индекс 0?

int index = oldArray.indexOf(person); 
if (index == -1) { 
    Log.d("Tag", "TESI index == -1"); 
} 
else { 
    oldArray.remove(index); <--- error is here 
    newArray.add(person); 
} 

я получил следующее исключение

java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
at com.tesi.salus.PersonView.updatePerson(PersonView.java:406) [line 406 is the remove] 

Мой вопрос заключается в том, как это возможно?

Если я хорошо понимаю, если oldArray пусто, то index должно быть -1, а не 0.

Или я что-то отсутствует?

Спасибо.

==================

Спасибо за ответы.

У меня есть только одна нить.

oldArray объявлен как:

public ArrayList oldArray<Person>; 

И инициализируется ниже как:

oldArray = new ArrayList(); 
+7

любая другая нить/асинтеза/обработчик/время r может касаться вашего массива одновременно? – njzk2

+0

@ njzk2, если он работал с массивом где-то еще между этим вызовом, не получит ли он ConcurrentModificationException при вызове remove, если он не создавал экземпляр нового экземпляра ArrayList? – zgc7009

+1

@ zgc7009: no. ConcurrentModificationException происходит только в случаях, когда параллельная модификация явно проверяется, например, в Iterators. – njzk2

ответ

0

если объект имеет нулевое значение, он будет найти индекс нуль (который равен нулю в пустом списке)

Добавить nullcheck и он должен работать

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