मैं जब मैं मैं उत्पादन नीचे पाने कोड ऊपर चलाने के दो जावा वर्गसूची ConcurrentModificationException फेंकता है लेकिन सेट ConcurrentModificationException फेंकता नहीं है?
import java.util.*;
public class ArrayListTest032 {
public static void main(String[] ar) {
List<String> list = new ArrayList<String>();
list.add("core java");
list.add("php");
list.add("j2ee");
list.add("struts");
list.add("hibernate");
Iterator<String> itr = list.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
list.remove("php");
while (itr.hasNext()) {
System.out.println(itr.next());
}
}
}
नीचे है।
core java
php
j2ee
struts
hibernate
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at ArrayListTest032.main(ArrayListTest032.java:20)
जो उम्मीद है कि मैं पुनरावृत्ति करते समय सूची को संशोधित कर रहा हूं। लेकिन नीचे जावा वर्ग में एक ही तर्क सेट परिवार द्वारा निष्पादित किया जाता है।
import java.util.*;
public class HashSetTest021 {
public static void main(String[] ar) {
Set<String> set = new HashSet<String>();
set.add("core java");
set.add("php");
set.add("j2ee");
set.add("struts");
set.add("hibernate");
Iterator<String> itr = set.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
set.remove("php");
while (itr.hasNext()) {
System.out.println(itr.next());
}
}
}
और बाहर रखा गया है।
hibernate
core java
j2ee
php
struts
किसी भी ConcurrentModificationException नहीं है।
मैं सिर्फ क्यों कोड के एक ही हिस्से list
परिवार के मामले में ConcurrentModificationException फेंकता जानना चाहते हैं, लेकिन कोई किसी भी set
परिवार के मामले में ConcurrentModificationException है
डेमो फीडल के लिए +1 –
नाइट: ऐरेलिस्ट इटरेटर वास्तव में एक संशोधन गिनती की जांच करता है, लंबाई प्रति लंबाई नहीं, इसलिए यदि आप जोड़ते हैं तो तत्काल एक तत्व को हटा दें, लंबाई को छोड़कर, आपको अभी भी एक समवर्ती मोडिफिकेशन अपवाद प्राप्त होगा। –