List的普通for loop delete 连续元素有遗漏的解决

来源:互联网 发布:淘宝休闲运动服 编辑:程序博客网 时间:2024/06/09 20:17

如下的代码:

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);    }}





0 0
原创粉丝点击