您的位置:首页 > 编程语言 > Java开发

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操作,就会出现异常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐