关于List的remove()方法

自定义一个ArrayList然后把符合条件的元素删除。

第一种方法:顺序循环,减一操作,把符合条件的元素删除;如果不进行减一操作,当list把符合条件的元素删除后,后面符合的元素可能不会删除,导致程序出错。

import java.util.ArrayList;
import java.util.List;

public class ListTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("Tom");
        list.add("Tom");
        list.add("David");
        list.add("Lily");
        list.add("Lucy");
        list.add("James");
        for (int i = 0; i < list.size(); i++) {
            if ("Tom".equals(list.get(i))) {
                list.remove(i);
                // 减一操作
                i--;
            }
        }
        System.out.println(list.toString());
    }
}

结果如下:

错误代码:

import java.util.ArrayList;
import java.util.List;

public class ListTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("Tom");
        list.add("Tom");
        list.add("David");
        list.add("Lily");
        list.add("Lucy");
        list.add("James");
        for (int i = 0; i < list.size(); i++) {
            if ("Tom".equals(list.get(i))) {
                list.remove(i);
            }
        }
        System.out.println(list.toString());
    }
}
View Code

结果如下:

 为什么会出现这种情况呢?原来List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。

 第二种方法:倒序循环,把符合条件的元素直接删除。

import java.util.ArrayList;
import java.util.List;

public class ListTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("Tom");
        list.add("Tom");
        list.add("David");
        list.add("Lily");
        list.add("Lucy");
        list.add("James");
        for (int i = list.size() - 1; i >= 0; i--) {
            if ("Tom".equals(list.get(i))) {
                list.remove(i);
            }
        }
        System.out.println(list.toString());
    }
}

结果如下:

  第三种方法:使用迭代器,把符合条件的元素删除。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("Tom");
        list.add("Tom");
        list.add("David");
        list.add("Lily");
        list.add("Lucy");
        list.add("James");
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            if ("Tom".equals(it.next())) {
                it.remove();
            }
        }
        System.out.println(list.toString());
    }
}

结果如下:

 推荐使用第三种方法进行remove操作。

posted @ 2021-07-27 15:08  北国浪子  阅读(2296)  评论(0编辑  收藏  举报