阿里巴巴Java开发手册中有一条中写道:
不要在foreach循环里进行元素的remove/add操作,remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。
对于它上面给出的正反例,我测试了一下,下面这段代码,输出的结果是 [1]
List<String> lists = new ArrayList<String>();
lists.add("1");
lists.add("2");
Iterator<String> iterator = lists.iterator();
while(iterator.hasNext()){
String item = iterator.next();
if("2".equals(item)){
iterator.remove();
}
}
System.out.println(lists);
而反例是,下面这段代码运行结果报错了:
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
for(String item : list){
if("2".equals(item)){ //这里会报错
list.remove(item);
}
}
// System.out.println(list);
运行结果如图:
但如果将“2”改成“1”,便不会出错,而是输出 [2]