下面提到的代码不会抛出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);
}
}