Primero, dale un código:
clase pública aslistMethod {public static void main (string [] args) {String Sentence = "Te amo"; Lista <String> palabras = arrays.aslist (sentence.split ("")); for (int i = 0; i <words.size ();) {if (words.get (i) .equals ("amor")) {words.remove (i); continuar; } i ++; } System.out.println (palabras); }Luego, ejecute este código, y finalmente, se informó un error:
Excepción en el hilo "principal" java.lang.unsupportedoperationException en java.util.abstractList.remove (abstractList.java:161) en list.aslistmethod.main (aslistmethod.java:12)
La parte inferior de la lista de la cadena de errores.
palabras.remove (i);
Este error me confundió porque miré aproximadamente este código antes de escribir este código. El método arrays.aslist devuelve una ArrayList. ¿Por qué no puedo eliminarlo? Luego, debido a un pequeño error, el resultado de las matrices. Inmediatamente me sentí como un gato ciego golpeó a un ratón muerto. Luego, siga el método matrices. Arrays.aslist Devuelve java.util.arrays.arraylist, que es solo una clase interna de matrices. Su código no es largo, así que lo publiqué directamente aquí:
ArrayList de clase estática privada <E> extiende AbstractList <E> Implementa RandomAccess, java.io.serializable {private estático final long SerialVersionUid = -2764017481108945198l; Final privado E [] a; ArrayList (E [] Array) {a = Objects.RequirenonNull (Array); } @Override public int size () {return A.Length; } @Override Public Object [] ToArray () {return a.clone (); } @Override @SupplesSwarnings ("sin verificar") public <t> t [] toArray (t [] a) {int size = size (); if (a.length <size) return arrays.copyOf (this.a, tamaño, (clase <? extiende t []>) a.getClass ()); System.ArrayCopy (this.A, 0, a, 0, tamaño); if (a.length> size) a [size] = null; regresar a; } @Override public e get (int index) {return a [index]; } @Override public e set (int index, e elemento) {e oldValue = a [index]; a [índice] = elemento; devolver OldValue; } @Override public int indexOf (objeto o) {if (o == null) {for (int i = 0; i <a.length; i ++) if (a [i] == null) return i; } else {para (int i = 0; i <a.length; i ++) if (o.equals (a [i])) return i; } return -1; } @Override public boolean contiene (objeto o) {return indexOf (o)! = -1; } @Override public splititerator <E> spliterator () {return Splitriters.splitriter (a, Splititer.Ordered); }} Desde el código fuente, hereda de AbstractList y no hay un método de eliminación, encontré el método de eliminación de AbstractList:
public e remove (int index) {lanzar nueva no apoyoperationException (); } De aquí es de donde proviene el mensaje de error. Finalmente, sabemos que la ArrayList devuelta por Arrays.Aslist no admite eliminar. De hecho, java.util.arrays.arrayList no admite ninguna forma de eliminación de elementos.
En resumen, la solución a este problema es un poco como un gato ciego que golpea a un ratón muerto, pero siempre y cuando miro cuidadosamente el error informado:
en java.util.abstractlist.remove (abstractList.java:161)
Llamar al método de eliminación de java.util.abstractList es diferente de lo que esperaba, y puede decirme la dirección claramente.
Espero que este artículo sea útil para que todos aprendan la programación de Java.