gpt4 book ai didi

java - Java中Iterator类的使用

转载 作者:行者123 更新时间:2023-11-29 07:45:09 26 4
gpt4 key购买 nike

我正在尝试使用迭代器,但它给了我这个错误:

java.util.concurrentModificationException: null (in java.util.ArrayList$Itr)

代码在这里:

import java.util.ArrayList;
import java.util.Iterator;

public class Iteratorr
{
ArrayList<String> list = new ArrayList<>();
Iterator<String> it = list.iterator();

void add()
{
list.add("Hello");
list.add("I");
list.add("am");
list.add("ArrayList");
}

void print()
{
while(it.hasNext())
{
String str = it.next();
System.out.println(str);
}
}
}

谁能解释一下原因?

最佳答案

事件顺序如下:

  1. 您为(空)列表创建一个迭代器。
  2. 您将元素添加到列表中。
  3. 您开始使用在第 1 步中创建的迭代器。

这行不通,因为第 2 步已使迭代器无效。这就是异常告诉你的。来自Javadoc :

The iterators returned by [ArrayList's] iterator and listIterator methods are fail-fast: if the list is structurally modified at any time after the iterator is created, in any way except through the iterator's own remove or add methods, the iterator will throw a ConcurrentModificationException.

您需要在开始迭代之前创建迭代器:

public class Iteratorr
{
...
Iterator<String> it = null;

void print() {
it = list.iterator();
while(it.hasNext()) {
String str = it.next();
System.out.println(str);
}
}

(更好的方法是在 print 中声明 it 而不是作为类的成员。)

如今编写此类循环的惯用方法是

  void print() {
for (String str : list) {
System.out.println(str);
}
}

它与使用显式迭代器具有相同的效果,但更加美观。

关于java - Java中Iterator类的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26512858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com