Java学习篇之迭代器并发修改异常问题
2016-12-11 16:29
435 查看
/*对集合使用迭代器进行获取,获取时候判断集合中是否存在"aa"对象 *如果有,就添加一个元素"AA". *这个案例是为了证明不能在迭代器进行迭代的时候不能对集合的长度进行改变,否则 *会报错:java.util.ConcurrentModificationException *如果单纯的是使用for循环,就没有问题,这个问题只是出现在了迭代器中 */ import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class BingFa { public static void main(String[] args) { //用Iterator遍历,用list操作,报错,并发修改异常 //function(); //单纯使用for循环进行操作,没报错 //function_1(); //仅仅使用Iterator进行操作,改变长度没有报错 function_2(); } //用Iterator遍历,用list操作,报错,并发修改异常 public static void function(){ List<String> list=new ArrayList<String>(); list.add("aa"); list.add("bb"); list.add("cc"); list.add("dd"); list.add("ee"); Iterator<String> it=list.iterator(); while(it.hasNext()){ String s=it.next(); //对获取的元素s进行判断,是不是有"aa" if(s.equals("aa")){ //此处是用list进行操作的 list.add("AA"); } //System.out.println(s); 测试 } System.out.println(list); } //单纯使用for循环进行操作,没报错 public static void function_1(){ List<String> list=new ArrayList<String>(); list.add("aa"); list.add("bb"); list.add("cc"); list.add("dd"); list.add("ee"); for(int i=0;i<list.size();i++){ String s=list.get(i); if(s.equals("aa")){ list.add("AA"); } //System.out.println(s);测试 } System.out.println(list); } //仅仅使用Iterator进行操作,改变长度没有报错 public static void function_2(){ List<String> list=new ArrayList<String>(); list.add("aa"); list.add("bb"); list.add("cc"); list.add("dd"); list.add("ee"); Iterator<String> it=list.iterator(); while(it.hasNext()){ String s=it.next(); if(s.equals("aa")){ //改变长度的一种法方式 it.remove(); } //System.out.println(s); 测试 } System.out.println(list); } }
总体来说,就是如果始终用同一个东西进行操作,就没有问题;但是如果用迭代器遍历,用list操作,就会出现异常。
相关文章推荐
- java-迭代器并发修改异常
- Java基础知识强化之集合框架笔记19:List集合迭代器使用之 并发修改异常的产生原因 以及 解决方案
- Java之集合框架 List接口的特有方法、迭代器的并发修改异常以及LinkedList特有方法
- Java Iterator ListIterator 迭代器 以及 并发修改异常 ConcurrentModificationException
- Android并发修改异常:java.util.ConcurrentModificationException
- java面试题15--迭代器并发修改异常ConcurrentModificationException
- 在Iterator时所产生的并发修改异常问题
- java里面在遍历集合的时候对集合进行添加或者删除修改时的并发修改异常
- 迭代器的并发修改异常
- java.util.ConcurrentModificationException:并发修改异常!
- java.util.ConcurrentModificationException ,遍历集合并同时修改集合,并发造成的异常解决办法
- linkedlist中使用迭代器出现并发修改异常,ConcurrentModificationException异常
- Java_基础—并发修改异常产生的原因及解决方案
- Java集合之ConcurrentModificationException(并发修改异常)分析
- java语言基础(66)——集合框架(arrayList ConcurrentModificationException 并发修改异常的解决方案)
- 深入分析集合并发修改异常(源码分析)java.util.ConcurrentModificationException
- 黑马程序员-java基础-并发修改异常产生的原因和解决方案
- 关于集合中在迭代器中用集合的对象删除元素的并发异常问题
- Java集合迭代器之fail-fast机制: 关于java集合的遍历以及ConcurrentModificationException(并发操作异常)
- 黑马程序员_ 迭代器中的并发修改异常