關於集合操作產生併發修改異常的問題
這個異常產生的原因是,迭代器依賴於集合而存在,在判斷成功後,集合中添加了新的元素,而迭代器並不知道,所有就報錯了。其實這個問題說的是:迭代器遍歷集合中的元素的時候,不要使用集合物件去修改集合中的元素。
翻看ArrayList原始碼和iterator()方法的具體實現,可以發現ArrayList繼承於集合抽象類有一個成員變數modCount,在每次對元素進行增刪改時,相應方法會將modCount++。而進行遍歷iterator的next方法中首先會呼叫checkForComodification()方法,這個方法會對modCount和expectedModCount進行比較,expectedModCount是iterator的成員變數,一開始被賦值為modCount,兩者不等就會丟擲併發修改的異常。
解決方案:迭代器遍歷的時候,可以通過迭代器修改集合中的元素,iterator類中也有修改元素的方法,並在修改完成後重新將modCount賦值給expectedModCount,之後進行next遍歷檢查就不會再報異常。
或者,我們可以在集合遍歷的時候,通過集合物件修改集合中的元素,這樣也不會進行期望修改次數與實際修改次數的比較,因此不會丟擲異常。
相關推薦
關於集合操作產生併發修改異常的問題
這個異常產生的原因是,迭代器依賴於集合而存在,在判斷成功後,集合中添加了新的元素,而迭代器並不知道,所有就報錯了。其實這個問題說的是:迭代器遍歷集合中的元素的時候,不要使用集合物件去修改集合中的元素。 翻看ArrayList原始碼和iterato
java:集合框架(併發修改異常產生的原因及解決方案)
A:案例演示 * 需求:我有一個集合,請問,我想判斷裡面有沒有"world"這個元素,如果有,我就新增一個"javaee"元素,請寫程式碼實現。 public class Demo3_List
(集合框架)迭代器的併發修改異常
迭代器的併發修改異常:迭代器在工作,但集合內部發生變化,就會出現併發修改異常 mport java.util.ArrayList; import java.util.Iterator; import java.util.List; public class text { public
Java 知識點整理-9.Java集合框架 集合概述+Collection介面+Iterator介面+迭代器+List介面+併發修改異常+ListIterator介面+Vector類+List子類
本章會用大量程式碼做具體演示。統一說明:返回型別E在JDK1.5之前是Object,1.5之後等泛型再講。 先介紹一個偶然發現的快捷鍵和一個很實用的快捷鍵: Alt + Shift + N 快速呼叫建立選單。直接按開頭的首字母進行建立即可,某些時候感覺比Ctrl + N更快捷。
深入分析集合併發修改異常(原始碼分析)java.util.ConcurrentModificationException
在我們迭代操作集合時,有時可能需要改變集合的元素,若操作不當,經常都會出現不正確的結果或者併發操作異常,如下: Exception in thread "main" java.util.ConcurrentModificatio
集合迭代時對集合進行修改拋ConcurrentModificationException(併發修改異常)的深究
大家應該都知道, 在java中, 在對一些集合迭代的過程中對集合進行一些修改的操作, 比如說add,remove之類的操作, 搞不好就會拋ConcurrentModificationException, 這一點在API文件上也有說的! 在迭代時只可以用迭代器進行刪除!
迭代器迭代元素,迭代器修改元素;集合集合遍歷元素集合修改元素解決併發修改異常
import java.util.ArrayList;import java.util.List;import java.util.ListIterator;public class TextDemo1
關於迭代器的在集合遍歷中發生的併發修改異常(java.util.ConcurrentModificationException
原因:迭代器是依賴於集合的,相當於集合的一個副本. 當迭代器操作的時候,如果發現和集合不一樣,則丟擲異常(併發修改異常) Exception in thread "main" java.util.ConcurrentModificationException:併發修改異常解
List集合遍歷時修改元素出現併發修改異常總結
import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; /* * * * * Concurrent
黑馬程式設計師-java基礎-併發修改異常產生的原因和解決方案
------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! ------- * 問題? * 我有一個集合,如下,請問,我想判斷裡面有沒有"world"這個元素,如果有,我就新增一個"javaee"元素,請寫程式碼實現。 * * Conc
java裡面在遍歷集合的時候對集合進行新增或者刪除修改時的併發修改異常
在今天看視訊的時候講到修改集合元素的時候會出現併發修改異常 就是像這樣 ArrayList<Integer> list = new ArrayList<>(); list
ListIterator避免併發修改異常
public class Demo3_List { /** ** A:案例演示 * 需求:我有一個集合,請問,我想判斷裡面有沒有"world"這個元素,如果有,我就新增一個"javaee"元素,請寫程式碼實現。 */ public static void main(Stri
Iterator併發修改異常
併發修改異常: 當方法檢測到物件的併發修改,但不允許這種修改時,丟擲此異常。 // ConcurrentModificationException 產生的原因: 迭代器是依賴於集合而存在的,在判斷成功之後,集合當中增加了新的元素,而迭代器卻不知道,所以就報錯
迭代器的併發修改異常
指的是在迭代的過程中集合的元素髮生了改變,所以不允許在遍歷過程中使用集合的方法改變的集合; public static void main(String[] args) { List<String> s = new ArrayList
Java學習筆記37:集合框架實現併發修改
import java.util.List; import java.util.ArrayList; import java.util.ListIterator; public class Demo1_Collection { //集合的遍歷 //判斷有沒有”word"元素,如果有,新
java.util.ConcurrentModification併發修改異常
在執行下面這段程式碼時出現了併發修改異常java.util.ConcurrentModification: public static void main(String[] args) { List l = new ArrayList(); l.add(100);
併發修改異常原理與解決方法
什麼是併發修改異常: 當我們在遍歷實現了collection介面與iterator介面的集合時(List、Set、Map), 我們可以通過遍歷索引也可以通過迭代器進行遍歷。在我們使用迭代器進行遍歷集合的時候,會獲取到當前集合的迭代物件。在裡面有封裝了迭代器的remove方法
關於泛型、foreach、併發修改異常的總結(歡迎探討)
泛型: 泛型的機制出現原因:集合海納百川,不同資料型別之間的呼叫需要轉型操作,有時候還會衝突 泛型的作用:統一型別(免去轉型的操作) 泛型的用法:在任何有<E>的地方,把E換成你想要的任何型別 ConcurrentModificationException,該
linkedlist中使用迭代器出現併發修改異常,ConcurrentModificationException異常
package ejbwebdemo; import java.util.LinkedList; import java.util.ListIterator; public class jasgj { public static void main(String[]
Java原始碼研究001:關於ArraytList/ List的併發修改異常
這個就是實現一個簡單的 ArrayList 的遍歷,如果存在一個為“aaa”的值,就新增一個“ccc” package Array; import java.util.ArrayList; import java.util.Iterator;p