java for 删除 list 中的项

231 阅读1分钟

使用 for i 删除(删除一个可以,删除多个不行)

public static void main(String[] args) {

    List<Integer> list = new ArrayList<Integer>();
    list.add(0);
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(5);
    list.add(6);
    list.add(7);
    System.out.println("没有remove前list的项:" + list.size());
    //正常循环
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
    }
    for (int i = 0; i < list.size(); i++) {
        if (list.get(i) == 3 || list.get(i) == 4)
            list.remove(list.get(i));
    }
    System.out.println("remove后list的项:" + list.size());
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
    }
}
/*
没有remove前list的项:8
0
1
2
3
4
5
6
7
remove后list的项:7
0
1
2
4
5
6
7
*/

会发现少删除了一个 4,这是因为当第一个 3 被删除的时候 list 的 size 已经发生变化。

使用 Iterator 删除

public static void main(String[] args) {

    List<Integer> list = new ArrayList<Integer>();
    list.add(0);
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(5);
    list.add(6);
    list.add(7);
    System.out.println("没有remove前list的项:" + list.size());
    //正常循环
    Iterator<Integer> it = list.iterator();
    while (it.hasNext()){
        Integer next = it.next();
        System.out.println("数字:" + next);
        if(next == 3 || next == 4){
            it.remove();
        }
    }
    System.out.println("remove后list的项:" + list.size());
    for (Integer integer : list) {
        System.out.println("数字:" + integer);
    }
}

倒着遍历删除

public static void main(String[] args) {

    List<Integer> list = new ArrayList<Integer>();
    list.add(0);
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(5);
    list.add(6);
    list.add(7);
    //正常循环
    for (int i = 0; i < list.size(); i++) {
        System.out.println("i的值:" + i + " 对应的数字:" + list.get(i));
    }
    System.out.println("没有remove前list的项:" + list.size());

    //边循环边删除
    for (int i = list.size() - 1; i >= 0; i--) {
        System.out.println("i的值  " + i + " 对应的数字 " + list.get(i));
        if (list.get(i) == 3) list.remove(list.get(i));
    }
    System.out.println("remove后list的项:" + list.size());

    System.out.println("==========remove后的list==========");
    for (int i = 0; i < list.size(); i++) {
        System.out.println("i的值  " + i + " 对应的数字 " + list.get(i));

    }
}