Java 为什么从迭代器搜索输出此异常?
尝试使用迭代器搜索特定整数时,我收到ConcurrentModificationException 我不知道它为什么在那里。我所做的任何研究都表明,当我试图在for循环中编辑列表时,这是一个例外。我没有这样做,事实上我甚至没有在迭代器中编辑列表Java 为什么从迭代器搜索输出此异常?,java,exception,iterator,Java,Exception,Iterator,尝试使用迭代器搜索特定整数时,我收到ConcurrentModificationException 我不知道它为什么在那里。我所做的任何研究都表明,当我试图在for循环中编辑列表时,这是一个例外。我没有这样做,事实上我甚至没有在迭代器中编辑列表 private ArrayList<Integer> list = new ArrayList(); private ListIterator<Integer> iterator = list.listIterator(); p
private ArrayList<Integer> list = new ArrayList();
private ListIterator<Integer> iterator = list.listIterator();
public void search(int input) {
while (iterator.hasNext()) {
if (input == iterator.next()) {
System.out.println(iterator.next());
}
}
}
public static void main(String[] args) {
SearchList sl = new SearchList();
for (int i = 0; i < 10; i++) {
sl.list.add(i);
}
System.out.println(sl.list);
sl.search(6);
}
实际产量:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at SearchList.search(SearchList.java:23)
at SearchList.main(SearchList.java:38)```
初始化类实例时创建迭代器,然后修改基础列表。 迭代器不喜欢这样 正如javadoc所说:
这个类的迭代器和listIterator方法返回的迭代器是快速失效的:如果在迭代器创建后的任何时候,列表在结构上被修改,除了通过迭代器自己的remove或add方法,迭代器将抛出ConcurrentModificationException。因此,在面对并发修改时,迭代器会快速、干净地失败,而不是在将来的不确定时间冒着任意、不确定行为的风险。在初始化类实例时创建迭代器,然后修改基础列表。 迭代器不喜欢这样 正如javadoc所说:
这个类的迭代器和listIterator方法返回的迭代器是快速失效的:如果在迭代器创建后的任何时候,列表在结构上被修改,除了通过迭代器自己的remove或add方法,迭代器将抛出ConcurrentModificationException。因此,在面对并发修改时,迭代器会快速、干净地失败,而不是在将来的不确定时间冒任意、不确定行为的风险。这里的问题是,您在开始时创建了一个迭代器,然后修改了列表
解决方案:在搜索方法中获取迭代器并使用它。这里的问题是,您在开始时创建了一个迭代器,然后修改了列表
解决方案:在搜索方法中获取迭代器并使用它。作为旁注:if input==iterator.next{System.out.printlniterator.next;}将使迭代器2前进times@berney_mark是的,否则您将遇到NosTouchElementException,或者跳过元素,在这里找不到您在开始创建迭代器时遇到的任何问题,然后修改了列表。不要那样做。在搜索方法中,获取迭代器并使用它。@berney_mark不要将已解决的问题放在问题标题中,这不是论坛,而是通过单击分数旁边的复选图标来接受对您帮助最大的答案。也可以读一下@berney_mark把它作为一个答案。如果它有助于您接受它,那么只需附带说明:If input==iterator.next{System.out.printlniterator.next;}将使迭代器2前进times@berney_mark是的,否则您将遇到NoSuchElementException,或者只是跳过元素,在这里找不到任何问题,您在开始时创建了迭代器,然后修改了列表。不要那样做。在搜索方法中,获取迭代器并使用它。@berney_mark不要将已解决的问题放在问题标题中,这不是论坛,而是通过单击分数旁边的复选图标来接受对您帮助最大的答案。也可以读一下@berney_mark把它作为一个答案。如果它对你有帮助,那就接受它
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at SearchList.search(SearchList.java:23)
at SearchList.main(SearchList.java:38)```