Estoy utilizando un List
para contener algunos datos obtenidos al llamar al método Array.asList()
. Entonces estoy tratando de eliminar un elemento usando el método myList.Remove(int i)
. Pero mientras trato de hacerlo, obtengo un UnsupportedOperationException
. ¿Cuál sería la razón de esto? ¿Cómo debo resolver este problema?UnsupportedOperationException al intentar eliminar de la lista devuelta por Array.asList
Respuesta
Array.asList()
envolturas una matriz en la interfaz de la lista. La lista todavía está respaldada por la matriz. Las matrices tienen un tamaño fijo: no admiten la adición o eliminación de elementos, por lo que el envoltorio no puede.
Los documentos no hacen esta tan claro como lo harían, pero hacen dicen:
Devuelve una lista de tamaño fijo el respaldo de la matriz especificada.
El "tamaño fijo" bit debe ser un indicio de que no se puede agregar o quitar elementos :)
Aunque hay otras maneras de evitar esto (otras maneras de crear un nuevo ArrayList
de una matriz) sin bibliotecas extra, yo personalmente recomendaría conseguir el Google Collections Library (o Guava, cuando se libera). A continuación, puede utilizar:
List<Integer> list = Lists.newArrayList(array);
La razón por la que estoy sugiriendo es que el GCL es una cosa buena en general, y bien vale la pena utilizar.
Como se señala en los comentarios, esto toma una copia de la matriz; la lista no está respaldada por la matriz original, y los cambios en cualquiera de las colecciones no se verán en la otra.
la implementación que recibe de asList no implementa una interfaz de lista completa. Transformaría la lista en ArrayList y luego haría modificaciones en ella.
Ver http://java.sun.com/j2se/1.4.2/docs/api/java/util/List.html#remove%28int%29
¿Quiere decir iteración en esta lista y poner todos los objetos de una ArrayList al principio? –
no, el constructor ArrayList toma una Colección como argumento, por lo que puede simplemente llamar a ArrayList nueva. –
No es java.util.ArrayList
. Arrays.asList()
devuelve su propia implementación List
y no admite la eliminación. Puede crear una verdadera ArrayList
de ella:
new java.util.ArrayList(Arrays.asList(someArray));
Es muy confuso cómo asList()
obras, debo admitir.
Porque obtiene la lista de solo lectura. tratar
List newList = new ArrayList(myList);
No es de solo lectura, solo es de tamaño fijo. –
Lea los documentos de la API para Arrays.asList():
Devuelve una lista de tamaño fijo el respaldo de la matriz especificada. (Los cambios en la lista devuelta "escriben a través" de la matriz.)
Tenga en cuenta que Collections.remove (int) está marcado en el Javadocs como una "operación opcional", es decir, no todas las Colecciones apoyarán. "lista de tamaño fijo" significa que no puede cambiar el tamaño de la lista, lo que eliminaría() haría. Entonces no es compatible.
Si desea cambiar la lista generada por Arrays.asList(), simplemente cópiela, p. new ArrayList(Arrays.asList(...))
.
uso
ArrayList en lugar de Lista
Lista ha fijado elemento de tamaño, la lista puede ni elemento Además, ni remover el artículo
- 1. remove() en la lista creada por Arrays.asList() throws UnsupportedOperationException
- 2. NHibernate TooManyRowsAffectedException al intentar eliminar varios objetos
- 3. UnsupportedOperationException en AbstractList.remove() al operar en ArrayList
- 4. UnsupportedOperationException en la Colección
- 5. ¿Cómo ordeno la lista de amigos devuelta por la nueva API Graph de Facebook?
- 6. Manejar la lista parcial o sumaria de objetos devuelta por GET/modelos utilizando datos de aserramiento
- 7. ArrayList.addAll (ArrayList) throws VECES UnsupportedOperationException
- 8. UTRAN Identidad de celda devuelta por getCid()
- 9. Eliminación de la matriz de caracteres devuelta por getenv()
- 10. Problemas al eliminar elementos de una lista al iterar a través de la lista
- 11. No puedo agregar un elemento a una lista? UnsupportedOperationException
- 12. HttpClient no informa la excepción devuelta por la API web
- 13. ¿Cuál es el orden predeterminado de una lista devuelta por una llamada de filtro de Django?
- 14. UnsupportedOperationException al fusionar un objeto de modelo Hibernate existente?
- 15. MemoryLoadError al intentar ejecutar la aplicación py2exe
- 16. Error INSTALL_FAILED_DEXOPT al intentar instalar la aplicación
- 17. Ejecutando una función javascript devuelta por la respuesta AJAX (PHP)
- 18. ¿Cuál es la unidad devuelta por el método MySQL GLength?
- 19. errores al intentar inicializar vm_args
- 20. ¿Por qué ReflectionOnlyAssemblyResolve no se ejecuta al intentar Assembly.ReflectionOnlyLoad?
- 21. Excepción al intentar llamar (SIP)
- 22. ¿Por qué obtengo "NoSuchMethodException" & "IOException al intentar cancelar", error?
- 23. No se puede modificar ArrayAdapter en ListView: UnsupportedOperationException
- 24. Java7 WatchService - Error de acceso denegado al intentar eliminar directorios anidados recursivamente vistos (solo Windows)
- 25. Python: eliminar el diccionario de la lista
- 26. F # insertar/eliminar elemento de la lista
- 27. Error de IIS al intentar iniciar WebMatrix
- 28. Python: condicionalmente eliminar elementos de la lista
- 29. Clase Objective-C devuelta por alloc confundida con clase incorrecta al inicializar
- 30. Error de compilación al intentar usar CAGradientLayer
+1 para Google Guava – Snekse
De acuerdo. Sin embargo, creo que vale la pena señalar que el método original devuelve una lista que está respaldada por la matriz original y cambia el "escrito a través" de la matriz original. Usar esto no devolverá una Lista respaldada por la matriz original, y cualquier cambio en esta Lista devuelta NO afectará a la matriz original. – desau
@desau: he editado para indicar eso. –