ArrayList使用迭代器在遍历的时候,调用remove方法会不会报错
文章目录
一、说明
在开发中,经常使用ArrayList的迭代器进行遍历元素,例如:
ArrayList<String> list = new ArrayList<>(Arrays.asList("aa", "bb", "cc"));
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
思考:在上面的迭代中,如果调用remove()
方法,会不会报错?
作者已经通过阅读源代码(java version “1.8.0_281”),先给出结论:
- 非并发情况下,在调用
next()
方法之前调用remove()
方法会报错; - 非并发情况下,在调用
next()
方法之后调用remove()
方法不会报错; - 并发情况下,在调用
next()
方法之后调用remove()
方法也会报错;
下面进行分析。
类名.this :内部(可以是匿名内部类)类调用外部类的对象时使用,即在内部类中使用时:外部类对象是外部类名.this,内部类对象则是this。
二、ArrayList
迭代器中的remove()
方法的作用
ArrayList迭代器中的remove()
方法,可以用于删除迭代过程中的上一次迭代的元素。因此,在非并发情况下,在调用next()
方法之后调用remove()
方法不会报错。
它只能删除游标指向的前一个元素,而且一个 next() 函数之后,只能跟着最多一个 remove() 操作,多次调用 remove() 操作会报错
private void listDemo() {
ArrayList