如下的代码:
public class Test {
public static void main (String[] args) {
ArrayList<String> list = new ArrayList<> ();
list.add ("a");
list.add ("b");
list.add ("b");
list.add ("c");
for (int i = 0; i < list.size (); i++) {
if ("b".equals (list.get (i))) {
list.remove (i);
}
}
System.out.println (list);
}
}
结果为: a b c
而不是期望中的a c
原因:
因为在删除第一个"b"以后 ,List的size从4 变成了3.
原来list(2)位置上的第二个"b" 的位置变成了list(1). 现在i==1 然后i++ .i==2了 就跳过了对原来的list(2) 现在的list(1)的位置上的第二个"b"的检测,所以 第二个"b" 就没有被删除掉;
解决方法:
public class Test {
public static void main (String[] args) {
ArrayList<String> list = new ArrayList<> ();
list.add ("a");
list.add ("b");
list.add ("b");
list.add ("c");
for (int i = 0; i < list.size (); i++) {
if ("b".equals (list.get (i))) {
list.remove (i--); //在remove一个元素后size--了 i也要--
}
}
System.out.println (list);
}
}