Sto utilizzando uno List
per contenere alcuni dati ottenuti chiamando il metodo Array.asList()
. Quindi sto cercando di rimuovere un elemento usando il metodo myList.Remove(int i)
. Ma mentre provo a farlo, sto ottenendo un UnsupportedOperationException
. Quale sarebbe la ragione di questo? Come dovrei risolvere questo problema?UnsupportedOperationException quando si tenta di rimuovere dall'elenco restituito da Array.asList
risposta
Array.asList()
avvolge una matrice nell'interfaccia lista. L'elenco è ancora supportato dall'array. Le matrici sono di dimensioni fisse - non supportano l'aggiunta o la rimozione di elementi, quindi il wrapper non può neanche.
I documenti non fanno questo chiaro come potrebbero, ma fanno dicono:
Restituisce un elenco di dimensioni fisse sostenuto dalla matrice specificata.
La "dimensione fissa" bit dovrebbe essere un suggerimento che non è possibile aggiungere o rimuovere elementi :)
Anche se ci sono altri modi per aggirare questo (altri modi per creare un nuovo ArrayList
da un array) senza librerie aggiuntive, personalmente consiglierei di prendere in considerazione lo Google Collections Library (o Guava, al momento del rilascio). È quindi possibile utilizzare:
List<Integer> list = Lists.newArrayList(array);
Il motivo che sto suggerendo è che il GCL è una buona cosa in generale, e vale la pena utilizzare.
Come indicato nei commenti, questo prende uno copia della matrice; l'elenco non è supportato dall'array originale e le modifiche in entrambe le raccolte non verranno visualizzate nell'altro.
l'implementazione ricevuta da asList non implementa un'interfaccia List completa. Trasformerei l'elenco in ArrayList e quindi apporterei le modifiche su di esso.
Vedi http://java.sun.com/j2se/1.4.2/docs/api/java/util/List.html#remove%28int%29
Intendi l'iterazione di questa lista e mettere tutti gli oggetti da un ArrayList all'inizio? –
no, il costruttore ArrayList accetta una raccolta come argomento, quindi è sufficiente chiamare il nuovo ArrayList. –
Non è java.util.ArrayList
. Arrays.asList()
restituisce la propria implementazione List
e non supporta la rimozione. È possibile creare un vero e proprio ArrayList
da esso:
new java.util.ArrayList(Arrays.asList(someArray));
E 'molto confusa come asList()
lavori, devo ammettere.
Perché si ottiene l'elenco di sola lettura. provare
List newList = new ArrayList(myList);
Non è di sola lettura: è solo una dimensione fissa. –
Si prega di leggere la documentazione API per Arrays.asList():
Restituisce un elenco di dimensioni fisse sostenuto dalla matrice specificata. (Modifiche al lista restituita "scrivono attraverso" alla matrice.)
noti che Collections.remove (int) è segnato nella Javadocs come "un'operazione facoltativa", cioè non tutti Collezioni lo sosterrà. "Elenco di dimensioni fisse" significa che non è possibile modificare la dimensione della lista, che remove() farebbe. Quindi non è supportato.
Se si desidera modificare l'elenco generato da Arrays.asList(), è sufficiente copiarlo, ad es. new ArrayList(Arrays.asList(...))
.
uso
ArrayList invece di Lista
Lista ha fissato elemento dimensione, Lista non può né voce aggiunta né rimuovere voce
- 1. UnsupportedOperationException quando si utilizza iterator.remove()
- 2. MySQLSyntaxErrorException quando si tenta di eseguire PreparedStatement
- 3. Per ciclo esegue una sola iterazione quando si tenta di rimuovere classi dagli elementi
- 4. di errore quando si tenta di installare R tramite Homebrew
- 5. Fragment già attiva - Quando si tenta di setArguments
- 6. Connettersi a ETIMEDOUT quando si tenta di installare un'estensione VSCODE
- 7. di errore quando si tenta di installare Karma
- 8. errori WSGIServer quando si tenta di eseguire app Django
- 9. Errori in std :: make_shared() quando si tenta di rendere shared_ptr?
- 10. getLoginStatus restituisce lo stato sconosciuto quando si tenta di disconnettersi da Facebook utilizzando Facebook JS SDK
- 11. conflitto quando si tenta Annullare le modifiche esempio in Subversion
- 12. Perché viene visualizzato "AccessDenied" quando si tenta di utilizzare HttpListener?
- 13. MediaStore.Images.Media.insertImage restituisce null quando si tenta di salvare l'immagine
- 14. Errore Git Giving "fetch first" quando si tenta di spingere
- 15. errore quando si tenta di installare pip su Mac 10,7
- 16. EclipseLink genera ArrayIndexOutOfBoundsException quando si tenta di tessere una classe
- 17. Redis restituisce un errore quando si tenta di salvare
- 18. Errore Xamarin Player Android quando si tenta di trovare VirtualBox
- 19. MemoryLoadError quando si tenta di eseguire l'applicazione py2exe
- 20. Bug che scompare quando si tenta di studiarlo
- 21. Python.h non appassionato quando si tenta di installare gevent-socketio
- 22. Ottenere ClassCastException quando si tenta di inserire RelativeLayout dianmicamente?
- 23. EXC_BAD_ACCESS quando si tenta di avviare UIActionSheet in Swift
- 24. Impossibile trovare il driver H2 quando si tenta di connettersi
- 25. NPE in clojure.lang.Compiler quando si tenta di caricare una risorsa
- 26. Bash: autorizzazione negata quando si tenta di aprire un file
- 27. Ottenere errore quando si tenta di aprire un feed finestra
- 28. Come rimuovere k__BackingField da json quando Deserialize
- 29. Quando l'oggetto restituito da invisible() cessa di essere invisibile?
- 30. vaadin, ottenendo puntatore nullo quando si tenta di aggiungere un elemento a sqlContainer
+1 per Google Guava – Snekse
concordato. Tuttavia, penso che valga la pena notare che il metodo originale restituisce un elenco supportato dall'array originale e modifica "write-through" all'array originale. L'utilizzo di questo non restituirà un elenco supportato dall'array originale e qualsiasi modifica in questo elenco restituito NON influirà sull'array originale. – desau
@desau: ho modificato per indicarlo. –