Skip to content
章节导航

集合的使用案例记录

循环删除 list 中的元素

jdk 1.8 之前

java
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "B", "D"));

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    if (item.equals("B")) {
        iterator.remove();  // 安全删除,不会引发异常
    }
}
System.out.println(list);  // [A, C, D]

jdk 1.8 之后

java
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "B", "D"));
list.removeIf(item -> item.equals("B"));
System.out.println(list);  // [A, C, D]

使用 Stream API

java
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "B", "D"));
list = list.stream()
          .filter(item -> !item.equals("B"))
          .collect(Collectors.toList());
System.out.println(list);  // [A, C, D]

错误示例(会引发异常)

java
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "B", "D"));
for (String item : list) {
    if (item.equals("B")) {
        list.remove(item);  // 抛出 ConcurrentModificationException
    }
}

线程安全示例

java
List<String> list = new CopyOnWriteArrayList<>(Arrays.asList("A", "B", "C"));
for (String item : list) {
    if (item.equals("B")) {
        list.remove(item);  // 安全
    }
}

风行高山,渡此枫林;聊以寸笔,叙我寸心。