并发读取和从列表中删除

时间:2014-08-21 07:27:07

标签: java

public static void main(String[] args) {    
    List<String> list = new ArrayList<String>(); 
    list.add("Value1"); 
    list.add("Value2"); 
    list.add("Value3"); 

    for(String val: list ) {  
        list.remove(0);     
        System.out.println(list); 
    } 
}

o \ p:[Value2,Value3] 线程&#34; main&#34;中的例外情况java.util.ConcurrentModificationException

这里我试图同时读取和删除第0个元素。 所以它应该给出一个异常。但我的qn是为什么它在异常之后执行println语句。它找到异常的那一刻它应该出现在循环之外。

3 个答案:

答案 0 :(得分:1)

你不应该在这里使用for循环。使用不会导致异常的迭代器:

ListIterator<String> iterator = list.listIterator();
while (iterator.hasNext()) {
    String string = iterator.next();
    iterator.remove();
}

答案 1 :(得分:0)

当你正在使用for-each循环时,当你从一个arraylist中删除时,事情会向后移动,因此你会跳过这个beacsue。要解决此问题,请使用regualr for loop;

for(int i=0;i<list.size();i++){
  list.remove(i);
   i--;
   System.out.print(i);
}

答案 2 :(得分:0)

你可以使用get Iterator和iterator.remove()

How Iterator's remove method actually remove an object