- String str1 = new String("1");
- String str2 = new String("2");
- String str3 = new String("3");
- String str4 = new String("4");
- String str5 = new String("5");
- List list = new ArrayList();
- list.add(str1);
- list.add(str2);
- list.add(str3);
- list.add(str4);
- list.add(str5);
- System.out.println("list.size()=" + list.size());
- for (int i = 0; i < list.size(); i++) {
- list.remove(i);
- // i--;
- //System.out.println(i+" "+list.get(i)+" ");
- }
- System.out.println("after remove:list.size()=" + list.size());
- list.size()=5
- after remove:list.size()=0
- list.size()=5
- after remove:list.size()=2
原因如下: List每remove掉一个元素以后,后面的元素都会向前移动 ,此时如果执行i++,则刚刚移过来的元素没有被读取。
分析:
List中有5条数据,需要循环5次,
第一次数据为:1 2 3 4 5
执行完remove(0) 后,数据为 2 3 4 5 , i=1
第二次数据为:2 3 4 5
执行完remove(1) 后,数据为 2 4 5 , i=2
第三次数据为:2 4 5
执行完remove(2) 后,数据为 2 4 , i=3
此时如果加上上面注释的代码 System.out.println(i+" "+list.get(i)+" "); 循环第4、5次时就会出现异常