关于集合遍历时出现的并发修改异常

使用迭代器遍历集合的时候是不可以修改元素的,不然就会报错java.util.ConcurrentModificationException (并发修改异常)

详细请看下面的例子:

       import java.util.ArrayList;
          import java.util.Collection;
 import java.util.Iterator;
   import java.util.List;
  import java.util.ListIterator;

   public class Exception {



         //使用迭代器时出现的问题以及解决方法
/*
 *   问题:  遍历一个集合:判断;里面是否有一个hello这个字符串,如果有就再添加一个javaee
 * 
 */

public static void main(String[] args) {
	// TODO Auto-generated method stub
	
	
	//创建集合对象
         List list = new ArrayList() ; 
	
	list.add("hello");
	list.add("world");
	list.add("i'am");
	list.add("java");
	
	
	//迭代器遍历

 //	    Iterator it = list.iterator();
  //	    while(it.hasNext()){	    	
 //	    	String s = (String) it.next() ;
     //	    	if(s.equals("hello")){
     //	    		 
  //	    		list.add("javaee");
	    	}	
    } 
    
	/*
	 * 测试后发现直接报错,但是程序的逻辑没有问题
       java.util.ConcurrentModificationException  (并发修改异常)
              产生原因:   迭代器是依赖集合而存在的,但是在遍历的过程中我们添加了元素,但是迭代器不知道集合已经改变了,所以就报错了
        原因总结:  使用迭代器的时候不可以用结合修改元素
              解决方法:1.  使用数组遍历,用集合添加元素
                                             结果你会发现这个是添加在集合的结尾
              2.使用迭代器遍历,用迭代器添加元素
                                              这个你会发现是添加在hello后面
              3我自己的方法
              
	 */

	//使用集合遍历,并且用集合添加元素
  //		Object[] obj = list.toArray();
 //		for(int i= 0 ; i< obj.length ;i++){
//			
//			String s = (String) obj[i];
      //			if(s.equals("hello")){
    //				list.add("javaee");
 //			}
 //			
//		}
	
	//使用迭代器遍历,使用迭代器添加元素  但是Iterator并没有修改方法,所以要用他的子类ListIterator
	ListIterator it = list.listIterator();
	while(it.hasNext()){
		
		String s = (String) it.next();
		if(s.equals("hello")){
			it.add("javaee");
		}
		
	}
	
	//我自己的方法解决方法: 
     //	    Iterator it = list.iterator();
     //	    boolean b = false ;
     //	    while(it.hasNext()){
       //	    	
       //	    	String s = (String) it.next() ;
     //	    	if(s.equals("hello")){
     //	    		
     //	    		//list.add("javaee");
   //	    		b= true ;
      //	    	}	
//	    }

  //	    if(b== true){
       //	    	list.add("javaee");
      //	    }
     
      Iterator it2 = list.iterator();
     //	    while(it2.hasNext()){
     //	    	
      //	    	String s = (String) it2.next() ;
      //	    	System.out.println(s);
    //	    }

}

  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值