Почему возникает IllegalStateException при удалении элементов из листа
Как избавиться от IllegalStateException
в коде:
import java.util.ArrayList;
import java.util.Iterator;
public class Iterator1 {
public static void main(String[] args) {
ArrayList<String> al1 = new ArrayList<>();
al1.add("Sasha");
al1.add("Raul");
al1.add("Mary");
al1.add("Sasha");
al1.add("Elena");
Iterator<String> iterator1 = al1.iterator();
while(iterator1.hasNext()) {
// System.out.println(iterator1.next());//выовд с помощю iterator'а
iterator1.remove();
iterator1.next();
}
System.out.println(al1.toString());
}
}
Ответы (2 шт):
Автор решения: kio
→ Ссылка
Поменяйте местами remove() и next(). next() возвращает элемент, который потом удаляется remove(), а у вас наоборот, поэтому и ошибка.
Iterator<String> iterator1 = al1.iterator();
while(iterator1.hasNext()) {
iterator1.next();
iterator1.remove();
}
Автор решения: Roman C
→ Ссылка
IllegalStateException
возникает по причине неправильного удаления элемента листа. Чтобы избавиться от этой ошибки следует избавиться от итератора и воспользоваться уже готовым методом removeAll
.
public class RemoveAllExample {
public static void main(String[] args) {
try {
ArrayList<String> al1 = new ArrayList<>();
al1.add("Sasha");
al1.add("Raul");
al1.add("Mary");
al1.add("Sasha");
al1.add("Elena");
// печать al1
System.out.println("ArrayList перед "
+ "removeAll() операцией : " + al1);
// Создадим другой лист ArrayList<String>
ArrayList<String> al2 = new ArrayList<>(al1);
// печать al2
System.out.println("Элементы коллекции" + " которые будут удалены : " + al2);
// Удалить элементы из al1
// находящиеся в al2
// используя метод removeAll()
al1.removeAll(al2);
// печать al1
System.out.println("ArrayList после "
+ "removeAll() операции : " + al1);
} catch (NullPointerException e) {
System.out.println("Ошибка : " + e);
}
}
}
Заметим, что в коде используется try-catch блок, потому, что может возникнуть NullPointerException
если этот список содержит нулевой элемент, а указанная коллекция не допускает нулевых элементов (необязательно) или если указанная коллекция имеет значение null
.