java-迭代删除

来源:互联网 发布:淘宝没有安能物流 编辑:程序博客网 时间:2024/05/18 22:52
package com.phl;import java.util.ArrayList;/** * Created by panhongliang on 16/1/30. */public class Test {    public static void main(String[] args) {        List<String> arrayList=new ArrayList();        arrayList.add("0");arrayList.add("0");        arrayList.add("0");arrayList.add("0");
arrayList.add("0");arrayList.add("0");        arrayList.add("0");arrayList.add("0");
arrayList.add("0");arrayList.add("0");/*错误方法:remove时使size减小,使元素个数少于10。会报IndexOutOfBoundsException        for(int i=0;i<10;i++){            arrayList.remove(i);        }*/
/*不会报错,但结果错误:remove时size减小,arrayList.size()也在减少
arrayList后面的元素不能被删除,        for(int i=0;i<arrayList.size();i++){            arrayList.remove(i);        }*/
/*错误方法:迭代前会获取modCount,remove触发modCount++,迭代下一个元素后会比较原modCount比较,不相等时触发ConcurrentModificationException        for(String s:arrayList){            arrayList.remove(s);        }
*/        /*正确方法:
remove触发modCount++,但是remove后会把modCount赋值给迭代器内部的expectedModCount。所以下次迭代时
expectedModCount=modCount
Iterator i=arrayList.iterator();        while (i.hasNext()){            i.next();            i.remove();        }*/    }}
0 0