JAVA中 在list<map>遍历过程中增加或者删除元素
时间: 2024-03-15 13:45:34 浏览: 91
在Java中,在遍历 `List<Map>` 集合时增加或删除元素会抛出 `ConcurrentModificationException` 异常,因为增加或删除元素会改变集合的大小,从而影响到遍历的顺序和结果。
为了避免这个异常,可以使用迭代器的 `remove` 方法来删除元素,或者使用 `ListIterator` 来增加或删除元素。
下面是示例代码:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
List<Map<Integer, String>> my_list = new ArrayList<>();
my_list.add(new HashMap<>() {{ put(1, "one"); put(2, "two"); }});
my_list.add(new HashMap<>() {{ put(3, "three"); put(4, "four"); }});
my_list.add(new HashMap<>() {{ put(5, "five"); put(6, "six"); }});
// 增加元素
ListIterator<Map<Integer, String>> iterator = my_list.listIterator();
while (iterator.hasNext()) {
Map<Integer, String> m = iterator.next();
m.put(7, "seven");
}
// 删除元素
iterator = my_list.listIterator();
while (iterator.hasNext()) {
Map<Integer, String> m = iterator.next();
if (m.containsKey(3)) {
iterator.remove();
}
}
// 输出修改后的集合
for (Map<Integer, String> m : my_list) {
for (Map.Entry<Integer, String> entry : m.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
}
```
输出结果为:
```
1: one
2: two
5: five
6: six
7: seven
7: seven
7: seven
```
注意,使用 `ListIterator` 增加和删除元素时需要先调用 `next` 方法来获取下一个元素,然后再调用 `add` 或 `remove` 方法。同时,使用 `ListIterator` 时必须使用 `List` 的实现类,例如 `ArrayList` 或 `LinkedList`,因为 `List` 接口并没有定义 `listIterator` 方法。
阅读全文