注:本文使用ArrayList的Iterator作为分析对象。
1. for循环语法糖在运行期是通过Iterator来实现的。
java语句:
List<String> list = new ArrayList<>();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("ee");
for (String s : list){
System.out.println(s);
if("bb".equals(s)){
list.remove(s);
}
}
查看其class文件,实际使用的是Iterator:
List<String> list = new ArrayList();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("ee");
Iterator var2 = list.iterator();
while(var2.hasNext()) {
String s = (String)var2.next();
System.out.println(s);
if ("bb".equals(s)) {
list.remove(s);
}
}
2. Iterator增加了对ArrayList并发访问的保护。
因此在for循环中只有Iterator自身可以remove元素,否者会报java.util.ConcurrentModificationException。
参考:java.util.ArrayList.Itr