💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
### 概述 在迭代过程中,使用了集合的方法对元素进行操作。导致迭代器并不知道集合中的变化,容易引发数据的不确定性。 ### 演示 ~~~ List<Integer> list = new ArrayList<Integer>(); list.add(123); list.add(456); list.add(789); list.add(987); Iterator<Integer> it = list.iterator(); while(it.hasNext()){ if (it.next().equals(789)){ list.add(1); } } ~~~ 抛出异常 ~~~ Exception in thread "main" java.util.ConcurrentModificationException //并发修改异常 ~~~ 原因就是在遍历过程中,使用了集合的方法修改或添加元素 .都是人为造成的 ,使用了逆指针 . 那么想要在迭代时对元素操作咋办?通过ListIterator迭代器操作元素是可以的,**ListIterator**的出现,解决了使用Iterator迭代过程中可能会发生的错误情况。 ## 并发修改异常 java 规定,如果一个 集合使用迭代器遍历,在遍历的过程中不允许修改集合的长度(增加或删除),可以修改.否则会并发修改异常.因为迭代器中** "记忆"的集合长度与集合中实际长度不同**,而导致出现索引与实际 元素不符,甚至 无限循环的情况发生.在使用迭代器的时候,避免类似操作.for循环底层为迭代器实现,所以也需要避免类似操作. ~~~ ArrayList<String> arr = new ArrayList<>(); arr.add("键盘侠"); arr.add("钢铁侠"); arr.add("蜘蛛侠"); arr.add("超人"); Iterator<String> it = arr.iterator(); while (it.hasNext()) { if ("超人".equals(it.next())) arr.add("金刚狼"); } ~~~ 产生异常 Exception in thread "main" java.util.ConcurrentModificationException at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:937) at java.base/java.util.ArrayList$Itr.next(ArrayList.java:891) at com.like_so.com.main.main(main.java:19)