集合框架-如何安全删除 List 中的元素

问题思考

  • 如何安全删除 List 中的元素,for 循环中删除一定会报错吗。
  • 如何删除 List 中奇数位置的元素?

如何安全删除 List 中的元素,for 循环中删除一定会报错吗

方法一:使用 Iterator 的 remove() 方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String item = iterator.next();
            if ("two".equals(item)) {
                iterator.remove();
            }
        }
        System.out.println(list);
    }
}

方法二:使用 Collection.removeIf() 方法

1
2
3
4
5
6
7
8
9
10
public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        list.removeIf(item -> item.equals("two"));
        System.out.println(list);
    }
}

方法三:使用 Java 8 Stream API

1
2
3
4
5
6
7
8
9
10
public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        list = list.stream().filter(item -> !"two".equals(item)).collect(Collectors.toList());
        System.out.println(list);
    }
}

方法四:使用 for 循环(正序遍历)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        for (int i = 0; i < list.size(); i++) {
            if ("two".equals(list.get(i))) {
                list.remove(i);
                i = i - 1;
            }
        }
        System.out.println(list);
    }
}

方法五:使用 for 循环(逆序遍历)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        for (int i = list.size() - 1; i >= 0; i--) {
            if ("two".equals(list.get(i))) {
                list.remove(i);
            }
        }
        System.out.println(list);
    }
}

如何删除 List 中奇数位置的元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Test {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(i);
        }
        System.out.println("原始列表: " + list);
        Iterator<Integer> iterator = list.iterator();
        int index = 0;
        while (iterator.hasNext()) {
            iterator.next();
            if (index % 2 == 0) {
                iterator.remove();
            }
            index++;
        }
        System.out.println("删除奇数位置元素后的列表: " + list);
    }
}

原始列表: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 删除奇数位置元素后的列表: [1, 3, 5, 7, 9]

本文作者:
本文链接: https://hgnulb.github.io/blog/2021/21991550
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!