首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

[转]ArrayList List 等迭代集合执行移除(remove) 操作容易犯的异常

2012-12-30 
[转]ArrayList List 等迭代集合执行移除(remove) 操作容易犯的错误原文地址:http://hi.baidu.com/chenqqab

[转]ArrayList List 等迭代集合执行移除(remove) 操作容易犯的错误
原文地址:http://hi.baidu.com/chenqqabcd/item/0af645c583596714515058b3

产生错误原因:迭代集合每次remove后的size都会发生变化,如果迭代基数不根据remove后的size动态调整,则会发生索引越界异常或内容遍历不全等问题,
错误方法1:
    ArrayList<String> al = new ArrayList<String>();
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("4");
    al.add("1");
    al.add("6"); 
    int size = al.size();
//错误处 会抛出索引越界异常
    for(int i=0;i<size;i++){
     if("1".equals(al.get(i)))
      al.remove(i);
    }
错误方法2:
    ArrayList<String> al = new ArrayList<String>();
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("4");
    al.add("1");
    al.add("6"); 
    //错误处 会导致内容遍历不完全
    for(int i=0;i<al.size();i++){
     if("1".equals(al.get(i)))
      al.remove(i);
    }

正确方法1:
    ArrayList<String> al = new ArrayList<String>();
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("4");
    al.add("1");
    al.add("6"); 
//正确
    Iterator<String> it = al.iterator();
    while(it.hasNext()){
     if("1".equals(it.next()))
      it.remove();
    }
正确方法2:
    ArrayList<String> al = new ArrayList<String>();
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("1");
    al.add("4");
    al.add("1");
    al.add("6");
//正确
for (int i = 0; i < al.size(); i++) {
     if ("1".equals(al.get(i))) {
      al.remove(i);
      i--;
     }
    }

热点排行