没有得到并发修改异常

时间:2016-09-29 19:26:42

标签: java concurrentmodification

下面提到的代码不会抛出ConcurrentModificationException。

List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
for(String s : list){
    if(list.get(3).equals(s)){
        list.remove(3);
    }
}

为什么会这样?????? 如果我将if条件更改为list.get(x).equals(s),其中x是除list.Size() - 1之外的任何内容,而不是获取ConcurrentModificationException。

将代码更改为以下获取ConcurrentModificationException

    List<String> list = new ArrayList<String>();
    list.add("1");
    list.add("2");
    list.add("3");
    list.add("4");
    list.add("5");
    for(String s : list){
        if(list.get(2).equals(s)){
            list.remove(3);
        }
    }

编辑2

在这种情况下我也得到了ConcurrentModification。根据提供的答案,在检查hasNext()时我们调用next()可以抛出异常。但是在这里我们删除最后一个元素,因此hasNext()没有任何机会通过。比为什么例外????

    List<String> list = new ArrayList<String>();
    list.add("1");
    list.add("2");
    list.add("3");
    list.add("4");
    list.add("5");
    for(String s : list){
        if(list.get(4).equals(s)){
            list.remove(0);
        }
    }

0 个答案:

没有答案