遍历list中删除,报了空指针异常
时间: 2023-08-17 08:04:05 浏览: 40
如果在遍历 `List` 时删除其中的元素,可能会导致 `ConcurrentModificationException` 异常或者 `NullPointerException` 异常,因为删除元素后,`List` 的大小发生了变化,可能会导致当前正在遍历的元素索引越界或者迭代器失效。下面是可能导致 `NullPointerException` 异常的一个例子:
```java
List<Integer> lst = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
for(int num : lst) {
if(num % 2 == 0) {
lst.remove(num); // 当 num=2 时,调用 lst.remove(2),实际上是删除 lst 中索引为 2 的元素,而不是删除 num=2 的元素
}
}
System.out.println(lst);
```
在这个例子中,当 `num` 的值为 `2` 时,调用 `lst.remove(num)` 会删除 `lst` 中索引为 `2` 的元素,也就是 `3`,而不是删除 `num` 的值为 `2` 的元素。因此,当执行到 `num=2` 的时候,实际上是在遍历到 `3`,而不是在遍历到 `2`。因此,在删除 `3` 的时候,由于 `lst` 的大小发生了变化,可能会导致迭代器失效,从而引发 `NullPointerException` 异常。
如果你需要在遍历 `List` 的同时删除其中的元素,可以使用 `Iterator` 迭代器的 `remove` 方法,避免出现上述问题。