本文简单的介绍下,在以下三种情况下,删除集合自身元素会发生什么结果:
1 普通的for循环
2 普通foreach循环
3 迭代器Iterator循环
首先创建一个简单的集合:
List<String> list = new ArrayList<>();
list.add("JAVA");
list.add("C");
list.add("C++");
list.add("C#");
一 普通for循环删除
for(int i=0;i<list.size();i++){
if(list.get(i).equals("C#")){
list.remove(i);
}
}
代码示例如上,最终结果比较清晰,正常删除,输出结果如下:
二 普通foreach循环
for(String str:list){
if(str.equals("C#")){
list.remove(str);
}
}
代码示例如上,最终输出结果如下:
直接抛出了ConcurrentModificationException异常,可见foreach循环下直接对集合进行修改会触发集合快速失败机制,不可删除元素。
三 迭代器Iterator循环
Iterator<String> iterable = list.iterator();
while (iterable.hasNext()){
if(iterable.next().equals("C#")){
iterable.remove();
}
}
代码示例如上,最终输出结果如下:
代码运行正常,删除了对应的集合元素。
总结:经过简单的代码示例和对比,可以很清晰的看出,三种循环情况下,删除集合自身元素,会运行出什么结果,个人还是推荐最后一种迭代方式,比较安全方便,当然以上介绍的还是非常粗浅,后面有时间再深入介绍一下