я следующий сегмент кода в 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();
любая другая нить/асинтеза/обработчик/время r может касаться вашего массива одновременно? – njzk2
@ njzk2, если он работал с массивом где-то еще между этим вызовом, не получит ли он ConcurrentModificationException при вызове remove, если он не создавал экземпляр нового экземпляра ArrayList? – zgc7009
@ zgc7009: no. ConcurrentModificationException происходит только в случаях, когда параллельная модификация явно проверяется, например, в Iterators. – njzk2