मुझे यह कथन मिला कि यदि थ्रेड एक संग्रह को संशोधित करता है, तो यह एक असफल-तेज़ इटरेटर के साथ संग्रह पर फिर से चल रहा है, तो इटेटर इस अपवाद को फेंक देगा। http://download.oracle.com/javase/6/docs/api/java/util/ConcurrentModificationException.html पर।पुनरावृत्ति के दौरान संग्रह में तत्व को संशोधित करने की अवधारणाएं?
मैंने पाया समवर्ती संशोधन भी कोड
List<Employee> lista= new ArrayList();
Employee emp1=new Employee();
Employee emp2=new Employee();
Employee emp3=new Employee();
lista.add(emp1);
lista.add(emp2);
lista.add(emp3);
for(Employee emp:lista)
{
emp2.setEmpId(2);
lista.remove(emp2);
}
Question1 नीचे में फेंक दिया जाता है: - तो मैं कह सकता हूँ पाश के लिए बढ़ाने के भी असफल फास्ट इटरेटर का उपयोग करता है आंतरिक रूप से हालांकि जब मैं नीचे दिए गए कोड को अंजाम यह काम करता है? ठीक
for(int i=0;i<lista.size();i++)
{
Employee empTemp=lista.get(i);
lista.remove(emp2);
}
Question2: - एक और सवाल जब बयान कहना
हैएक धागा एक एक संग्रह
मेरा अनुमान संशोधन यहाँ सूची इंटरफेस के लिए संग्रह के अंदर हटाने या इसके लिए नहीं तत्व का अद्यतन मतलब है कि यह भी सेट इंटरफेस के लिए तत्व के संशोधन शामिल है, जबकि है को संशोधित करता है। सही? कम से कम जिन कार्यक्रमों की मैंने कोशिश की वह उनके साथ मामला है।
संपादित
के बारे में सेट मैं अपने ऊपर बयान पर शक यानी यह समवर्ती संशोधन अपवाद फेंकता है जब हम तैयार किया, जबकि iterating.I कोड के नीचे की कोशिश की संशोधित करने की कोशिश, लेकिन यह किसी भी अपवाद
HashSet<Employee> set1= new HashSet();
Employee emp4=new Employee();
Employee emp5=new Employee();
Employee emp6=new Employee();
set1.add(emp4);
set1.add(emp5);
set1.add(emp6);
Iterator iter1=set1.iterator();
while(iter1.hasNext())
{
Employee emp12=(Employee)iter1.next();
System.out.println("");
emp5.setEmpId(2);
}
फेंक नहीं था
आदर्श रूप से प्रति बयान के अनुसार यदि सेटर को http://download.oracle.com/javase/6/docs/api/java/util/HashSet.html पर बनाया गया है, तो इसे समवर्ती संशोधन अपवाद फेंकना चाहिए लेकिन ऐसा नहीं हुआ। यकीन नहीं है कि क्यों?
प्रश्न 1 पर आपके उदाहरण के बारे में: "हालांकि जब मैं कोड के नीचे निष्पादित करता हूं तो यह ठीक काम करता है" आपका कोड ठीक नहीं है, यह बहुत बीमार है। यदि आप अनुक्रमित फॉर-लूप के भीतर तत्व जोड़ते/हटाते हैं तो आप कुछ तत्वों को छोड़ देंगे या अन्य तत्वों को दो बार संसाधित करेंगे। यह एक अच्छी बात है कि जब आप संग्रह को संशोधित करते हैं तो इटेटरेटर अपवाद फेंकता है। – toto2