2015-01-13 3 views
2

я получаю эту ошибку:Итератор Операция удаления не работает

Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(Unknown Source) at java.util.ArrayList$Itr.next(Unknown Source) at onlineShopExamen.Client.remove(Client.java:30) at onlineShopExamen.Main.<init>(Main.java:17) at onlineShopExamen.Main.main(Main.java:23)

Мой код заключается в следующем:

public void remove(){ 
    Iterator<Product> iter = lijstProducten.iterator(); 
    while(iter.hasNext()){ 
     Product movie = iter.next(); 
     lijstProducten.remove(movie); 
    } 
} 

Где продукт представляет собой список продуктов (фильмов в данном случае)

Использование:

public void remove(){ 
    Iterator<Product> iter = lijstProducten.iterator(); 
    while(iter.hasNext()){ 
     iter.remove(); 
    } 
} 

Не работает либо

Это дает мне эту ошибку:

Exception in thread "main" java.lang.IllegalStateException 
at java.util.ArrayList$Itr.remove(Unknown Source) 
at onlineShopExamen.Client.remove(Client.java:30) 
at onlineShopExamen.Main.<init>(Main.java:19) 
at onlineShopExamen.Main.main(Main.java:25) 

EDIT FIXED

Это работает:

public void remove(){ 
    Iterator<Product> iter = lijstProducten.iterator(); 
    while(iter.hasNext()){ 
     iter.next(); 
     iter.remove(); 
    } 
} 

ответ

3

это то, что называется консервативным итератора: в вскоре после изменения базового контейнера любой итератор, указывающий на этот контейнер, будет признан недействительным (th at's, что означает ConcurrentModificationException).

есть Iterator.remove способ. используй это.

public void remove(){ 
    Iterator<Product> iter = lijstProducten.iterator(); 
    while(iter.hasNext()){ 
     iter.next(); 
     iter.remove(); // removes previous item 
    } 
} 

, который вы, вероятно, может (при условии, lijstProducten является List) также пишут как уже упоминалось Ankit

public void remove(){ 
    lijstProducten.clear(); 
} 
+0

public void remove() { \t \t Итератор iter = lijstProducten.iterator(); \t \t while (iter.hasNext()) { \t \t \t iter.remove(); \t \t \t} \t} Я сделал это^ Тем не менее получить ту же ошибку:/ – Jbv1

+0

Ahhhh спасибо! Забыл iter.nex(); – Jbv1

0

Попробуйте iter.remove() вместо lijstProducten.remove (фильм). Вы не можете изменить список, который вы выполняете, но theres удалите метод в Iterator, который сделает это за вас.

+0

Я пробовал это, я получаю ту же ошибку: / – Jbv1

1

В дополнение к отвечу Бейелера. Как я вижу из вашего кода, ваш метод remove очищает весь список.

Я предлагаю вам использовать метод myList.clear();, чтобы удалить все элементы из списка, а не создать свой собственный метод.

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