Geben Sie zuerst ein Stück Code:
öffentliche Klasse ASListMethod {public static void main (String [] args) {String surt = "Ich liebe dich"; List <String> Words = Arrays.aslist (Satz.split ("")); für (int i = 0; i <words.size ();) {if (words.get (i) .equals ("love") {Words.remove (i); weitermachen; } i ++; } System.out.println (Wörter); }Dann führen Sie diesen Code aus, und schließlich wurde ein Fehler gemeldet:
Ausnahme in Thread "Main" java.lang.unsupportedoperationException bei java.util.abstractlist.remove (AbstractList.java:161) unter list.aslistMethod.main (ASListMethod.java:12)
Am Ende der Fehlerkettenliste.
Wörter.Remove (i);
Dieser Fehler hat mich verwirrt, weil ich diesen Code grob angesehen habe, bevor ich diesen Code geschrieben habe. Die Arrays.aslist -Methode gibt eine ArrayList zurück. Warum kann ich es nicht entfernen? Als nächstes wurde das Ergebnis von Arrays.aslist aufgrund eines kleinen Fehlers Java.util.ArrayList zugeordnet, aber die Zuweisung schlug fehl. Ich fühlte mich sofort wie eine blinde Katze, die eine tote Maus traf. Befolgen Sie dann die Methode der Arrays.aSlist und stellen Sie fest, dass diese ArrayList nicht dieselbe ArrayList ist. Arrays.aslist gibt Java.util.Arrays.ArrayList zurück, die nur eine innere Klasse von Arrays ist. Sein Code ist nicht lang, also habe ich ihn direkt hier gepostet:
private statische Klasse ArrayList <E> Erweitert AbstractList <E> implementiert RandomAccess, java.io.serializable {private statische endgültige long serialversionuid = -2764017481108945198L; Private Final E [] a; ArrayList (e [] Array) {a = Objects.requirenonnull (Array); } @Override public int size () {return A.Length; } @Override public Object [] toArray () {return a.clone (); } @Override @SuppressWarnings ("deaktiviert") public <T> t [] toArray (t [] a) {int size = size (); if (A.Length <Größe) return arrays.copyof (this.a, Größe, (Klasse <?? Erweitert t []>) a.getClass ()); System.ArrayCopy (this.a, 0, a, 0, Größe); if (a.länge> Größe) a [Größe] = null; Rückkehr a; } @Override public e get (int index) {return a [index]; } @Override public e set (int index, e element) {e oldValue = a [index]; ein [Index] = Element; kehren Sie OldValue zurück; } @Override public int indexof (objekt o) {if (o == null) {für (int i = 0; i <a.länge; i ++) if (a [i] == null) return i; } else {for (int i = 0; i <a.länge; i ++) if (o.equals (a [i]) return i; } return -1; } @Override public boolean enthält (Objekt o) {return indexof (o)! = -1; } @Override public Splitterator <E> Splitters () {return Splitterators.Spliterator (a, Splitterer.Ordeded); }} Aus dem Quellcode erbt er von der AbstractList und es gibt keine Methode entfernen, ich habe die Entfernung der AbstractList gefunden:
public e remove (int index) {neue nicht unterstützte OperationException () werfen; } Hier stammt die Fehlermeldung. Schließlich wissen wir, dass die von Arrays.aslist zurückgegebene ArrayList nicht unterstützt wird. Tatsächlich unterstützt Java.util.Arrays.ArrayList keine Form der Elemententfernung.
Zusammenfassend ist die Lösung für dieses Problem in der Tat ein bisschen wie eine blinde Katze, die auf eine tote Maus schlägt, aber solange ich den gemeldeten Fehler sorgfältig betrachte:
bei java.util.abstractlist.remove (AbstractList.java:161)
Das Aufrufen der Entfernenmethode von java.util.abstractList unterscheidet sich von dem, was ich erwartet habe, und es kann mir die Richtung klar sagen.
Ich hoffe, dieser Artikel wird für alle hilfreich sein, um Java -Programme zu lernen.