import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class TestList { /**
 * @param args
 */
public static void main(String[] args) {
List l = new ArrayList();
l.add("aaa");
l.add("bbb");
l.add("aaa");
l.add("aaa");
l.add("ccc"); int index = 0;
for (int i = 0; i < l.size(); i++) {
index++;
System.out.println(index + "__" + l.get(i));
if (l.get(i).equals("aaa")) {
System.out.println(l.get(i) + "已删除");
l.remove(i);
}
}
System.out.println(l); }
}上面代码中 用循环删除为aaa的项目。
循环完成后 还剩最后一个aaa没删除 这是为啥。

解决方案 »

  1.   

    每次l.remove()后,l.size()都在变化.你循环的i<l.size()都在变.
      

  2.   

    for (int i = l.size()-1; i >-1 ; i--) {
      

  3.   

    因为remove之后size减少了,但是i没有,所以发生错位了
      

  4.   

    删除之后list的大小也在变化,下标也就变化了,所里你结果不对。
      

  5.   

    list删除一个后,size也变化了,因此会有问题。
    如果是要从一个list中删除一些元素,最后是再新建一个空的list,然后把符合条件的add,这样不会出错。