मैं, कैसे दो सूचियों के बीच चौराहे प्राप्त करने के लिए परीक्षण करने के लिए चाहता था यहाँ मेरी कोड है:सूची retainAll अपवाद
List<Integer> list = Arrays.asList(16, 17, 18, 19, 20);
List<Integer> list2 = list.subList(2, 5);
System.out.println(list.subList(2, 5));
System.out.println(list.containsAll(list.subList(2, 5)));
System.out.println(list.retainAll(list2));
यह पैदा करता है:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(Unknown Source)
at java.util.AbstractList$Itr.remove(Unknown Source)
at java.util.AbstractCollection.retainAll(Unknown Source)
at gov.noaa.nhc.App.main(App.java:48)
लेकिन मैं किसी भी हटा नहीं कर रहा हूँ। यह उत्पादन अपवाद क्यों है?
अद्यतन मैं:
का उपयोग करना:
List<Integer> list = new ArrayList<Integer>(Arrays.asList(16, 17, 18, 19, 20));
List<Integer> list2 = list.subList(2, 5);
का उत्पादन:
java.util.ConcurrentModificationException
List2 के बाद से, List1 के द्वारा समर्थित है List1 से आइटम निकालने के इस अपवाद का कारण होगा। अंत में काम कर रहे संस्करण:
List<Integer> list = new ArrayList<Integer>(Arrays.asList(16, 17, 18, 19, 20));
List<Integer> list2 = Arrays.asList(18, 19, 20);
या
List<Integer> list = new ArrayList<Integer>(Arrays.asList(16, 17, 18, 19, 20));
List<Integer> list2 = new ArrayList<Integer>(Arrays.asList(18, 19, 20));
या
List<Integer> list = new ArrayList<Integer>(Arrays.asList(16, 17, 18, 19, 20));
List<Integer> list2 = new ArrayList<Integer>(list.subList(2, 5));
अपने जवाब हर किसी के लिए धन्यवाद।
'असमर्थित ऑपरेशन अपवाद' - यदि इस संग्रह द्वारा 'retainAll' ऑपरेशन समर्थित नहीं है। – user845279
आपके उदाहरण का उपयोग करके मुझे थ्रेड "मुख्य" java.util.ConcurrentModificationException –
में अपवाद मिलता है क्योंकि ऐसा इसलिए है कि आपने 'subList()' फ़ंक्शन का उपयोग किया था। 'list2' को 'सूची' द्वारा समर्थित किया गया है। 'RetainAll' फ़ंक्शन गैर अंतरण मूल्यों को हटाने के लिए एक पुनरावर्तक का उपयोग करता है - इससे 'ConcurrentModificationException' का कारण बनता है। आप जवाडॉक्स पर 'इटरेटर' और समवर्ती संशोधन के बारे में पढ़ सकते हैं। – user845279