java foreach 遍历 修改list报错的原因和相关源码
时间: 2024-05-05 20:19:09 浏览: 68
Java中的foreach循环是只读的,不能对正在遍历的集合进行修改,否则会抛出ConcurrentModificationException异常。如果需要对集合进行修改,可以使用迭代器的remove()方法,或者使用传统的for循环。
以下是一个示例代码:
```java
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
for (String str : list) {
if (str.equals("B")) {
list.remove(str);
}
}
// 会抛出ConcurrentModificationException异常
```
正确的修改方式:
```java
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
Iterator<String> iter = list.iterator();
while(iter.hasNext()){
String str = iter.next();
if(str.equals("B")) {
iter.remove();
}
}
```
或者:
```java
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals("B")) {
list.remove(i);
i--;
}
}
```
阅读全文