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




iterator (3)

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>

धन्यवाद!


Answers

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

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


मुझे संदेह है कि आपको एक 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();
    }
}

जावा 8 के साथ सबसे आसान तरीका अंग्रेजी वर्णमाला के लिए है

कक्षा कार्यान्वयन

public class NewspaperClass implements Comparable<NewspaperClass>{
   public String name;

   @Override
   public int compareTo(NewspaperClass another) {
      return name.compareTo(another.name);
   }
}

तरह

  Collections.sort(Your List);

यदि आप वर्णमाला के लिए सॉर्ट करना चाहते हैं जिसमें गैर अंग्रेजी वर्ण हैं तो आप लोकेल का उपयोग कर सकते हैं ... कोड के नीचे तुर्की चरित्र प्रकार का उपयोग करें ...

कक्षा कार्यान्वयन

public class NewspaperClass implements Comparator<NewspaperClass> {
   public String name;
   public Boolean isUserNewspaper=false;
   private Collator trCollator = Collator.getInstance(new Locale("tr_TR"));



   @Override
   public int compare(NewspaperClass lhs, NewspaperClass rhs) {
      trCollator.setStrength(Collator.PRIMARY);
      return trCollator.compare(lhs.name,rhs.name);
   }
}

तरह

Collections.sort(your array list,new NewspaperClass());






java list iterator arraylist