java - ArrayList पर ऑपरेट करते समय AbstractedOremationException AbstractList.remove() में




iterator (2)

मुझे लगता है कि आप उस विधि में प्राप्त List प्राप्त करने के लिए Arrays उपयोगिता का उपयोग कर रहे हैं। वस्तु वास्तव में ArrayList प्रकार का है, लेकिन यह java.util.Arrays.ArrayList , java.util.ArrayList नहीं है।

java.util.Arrays.ArrayList संस्करण अपरिवर्तनीय है और इसकी निकासी remove() विधि ओवरराइड नहीं है। इस प्रकार, यह remove() सारसूची क्रियान्वयन को रोकता है, जो एक UnsupportedOperationException फेंकता है।

ArrayList की सूची इटेटरेटर हटाने विधि को कार्यान्वित करता है, हालांकि मुझे निम्नलिखित अपवाद फेंक दिया गया है: java.util.AbstractList.remove (AbstractList.java:144) पर असमर्थितऑपरेशन अपवाद

इस कोड से:

protected void removeZeroLengthStringsFrom(List<String> stringList)
{
    ListIterator<String> iter = stringList.listIterator();
    String s;
    while (iter.hasNext())
    {
        s = iter.next();
        if (s.length() == 0)
        {
            iter.remove();
        }
    }
}

मुझे यहां क्या समझ नहीं आ रहा है? मैंने सत्यापित किया है कि List<String> मैं गुजर रहा हूं वास्तव में ArrayList<String>

धन्यवाद!


मुझे संदेह है कि आपको एक ArrayList पारित किया जा रहा है, क्योंकि ArrayList iterator पर निकाली विधि उस अपवाद को फेंक नहीं देती है।

मुझे लगता है कि आपके एरेलेलिस्ट के उपयोगकर्ता व्युत्पन्न वर्ग को पारित किया जा रहा है, जो इटेटरेटर उस अपवाद को हटाने पर फेंक देता है।

public void remove() {
    if (lastRet == -1)
    throw new IllegalStateException();
        checkForComodification();

    try {
    AbstractList.this.remove(lastRet);
    if (lastRet < cursor)
        cursor--;
    lastRet = -1;
    expectedModCount = modCount;
    } catch (IndexOutOfBoundsException e) {
    throw new ConcurrentModificationException();
    }
}






arraylist