Tout d'abord, donnez un morceau de code:
classe publique AslistMethod {public static void main (String [] args) {String phrase = "i love you"; List <string> words = arrays.aslist (phrase.split ("")); for (int i = 0; i <words.size ();) {if (words.get (i) .equals ("love")) {word.remove (i); continuer; } i ++; } System.out.println (mots); }Ensuite, exécutez ce code, et enfin, une erreur a été signalée:
Exception dans Thread "Main" java.lang.unsupportedOperationException à java.util.abstractList.remove (abstractList.java:161) sur list.aslistMethod.main (aslistMethod.java:12)
Le bas de la liste des chaînes d'erreur.aslistMethod.main (aslistMethod.java:12) concerne cette ligne de code:
Words.Remove (i);
Cette erreur m'a fait confondre parce que j'ai regardé ce code à peu près avant d'écrire ce code. La méthode Arrays.aslist renvoie une liste Array. Pourquoi ne puis-je pas le supprimer? Ensuite, en raison d'une petite erreur, le résultat des tableaux. Aslist a été affecté à java.util.arraylist, mais la mission a échoué. Je me sentais immédiatement comme un chat aveugle a frappé une souris morte. Ensuite, suivez la méthode Arrays.aslist et constatez que ce ArrayList n'est pas le même ArrayList. Arrays.aslist renvoie java.util.arrays.arraylist, qui n'est qu'une classe intérieure de tableaux. Son code n'est pas long, donc je l'ai publié directement ici:
classe statique privée ArrayList <E> étend AbstractList <e> implémente RandomAccess, java.io.serializable {private statique final long SerialVersionUID = -2764017481108945198l; final privé e [] a; ArrayList (e [] array) {a = objets.RequiRenonnull (array); } @Override public int size () {return a.Length; } @Override Public Object [] toArray () {return a.clone (); } @Override @SuppressWarnings ("Unchecked") public <T> t [] toArray (t [] a) {int size = size (); if (a.Length <size) return arrays.copyof (this.a, size, (classe <? étend t []>) a.getClass ()); System.ArrayCopy (this.a, 0, a, 0, taille); if (a.length> taille) a [size] = null; retourner a; } @Override public e get (int index) {return a [index]; } @Override public e set (int index, e élément) {e oldvalue = a [index]; a [index] = élément; Retour OldValue; } @Override public int indexof (objet o) {if (o == null) {for (int i = 0; i <a.length; i ++) if (a [i] == null) return i; } else {for (int i = 0; i <a.Length; i ++) if (o.equals (a [i])) return i; } return -1; } @Override public boolean contient (objet o) {return indexof (o)! = -1; } @Override public Spliterator <E> Spliterator () {return Spliterators.spliterator (A, Spliterator.Ordered); }} À partir du code source, il hérite de AbstractList et il n'y a pas de méthode de suppression, j'ai trouvé la méthode de suppression d'AbstractList:
public e re Suppor (int index) {lancez un nouveau Uns-supportOperationException (); } C'est de là que vient le message d'erreur. Enfin, nous savons que l'arrayList renvoyé par Arrays.Aslist ne prend pas en charge la suppression. En fait, java.util.arrays.arrayList ne prend en charge aucune forme de suppression des éléments.
Pour résumer, la solution à ce problème est en effet un peu comme un chat aveugle frappant une souris morte, mais tant que je regarde attentivement l'erreur signalée:
sur java.util.abstractList.remove (abstractList.java:161)
Appeler la méthode de suppression de java.util.abstractList est différent de ce à quoi je m'attendais, et il peut me dire clairement la direction.
J'espère que cet article sera utile à tout le monde d'apprendre la programmation Java.