集合的使用案例记录
循环删除 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); // 安全
}
}
枫渡札记