`
zsj01005432
  • 浏览: 42301 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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

    博客分类:
  • java
 
阅读更多
原文地址: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--;
     }
    }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics