Java学习篇之迭代器并发修改异常问题

/*对集合使用迭代器进行获取,获取时候判断集合中是否存在"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 list=new ArrayList();
		list.add("aa");
		list.add("bb");
		list.add("cc");
		list.add("dd");
		list.add("ee");
		Iterator 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 list=new ArrayList();
		list.add("aa");
		list.add("bb");
		list.add("cc");
		list.add("dd");
		list.add("ee");		
		for(int i=0;i list=new ArrayList();
		list.add("aa");
		list.add("bb");
		list.add("cc");
		list.add("dd");
		list.add("ee");			
		Iterator 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)