java在一个循环中删除列表中元素的问题

思考下面这段代码的结果:
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
for(int i=0;i<list.size();i++){
    list.remove(i);
}
System.out.println(list);


想必大家都知道结果是[b,d]
因为当一个元素被删除时,列表的大小缩小并且下标变化,当删除了元素a之后,列表的长度变为3,列表变为[b,c,d],所以当i=1的时候,其实删除的是元素c,列表变为[b,d],循环结束。

如下代码是有名的ConcurrentModificationException异常
      ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
      for(String s:list){
            if(s.equals("a")){
                list.remove(s);
            }
      }

这个问题是说,你不能在对一个List进行遍历的时候将其中的元素删除掉。

解决方法如下:
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
Iterator<String> iter = list.iterator();
while(iter.hasNext()){
        String s = iter.next();
        if(s.equals("a")){
            iter.remove();
    }
}

你可能感兴趣的:(java)