2011-09-13 8 views
30

ho cercato qui di seguito il codicejava.lang.UnsupportedOperationException a java.util.AbstractList.remove (fonte sconosciuta)

String s[]={"1","2","3","4"}; 
Collection c=Arrays.asList(s); 
System.out.println(c.remove("1") +" remove flag"); 

System.out.println(" collcetion "+c); 

mi è stato sempre

Exception in thread "main" java.lang.UnsupportedOperationException 
at java.util.AbstractList.remove(Unknown Source) 
at java.util.AbstractList$Itr.remove(Unknown Source) 
at java.util.AbstractCollection.remove(Unknown Source) 
at test.main(test.java:26) 

Qualcuno può aiutarmi a risolvere questo problema ?

+2

Qual è la domanda? –

+4

È un post di blog? – Jacob

+0

quindi conosci la risposta? – Bajji

risposta

18

Il lavoro facile è solo passare in List in un costruttore di ArrayList.

Ad esempio:

 
String valuesInArray[]={"1","2","3","4"}; 
List modifiableList = new ArrayList(Arrays.asList(valuesInArray)); 
System.out.println(modifiableList.remove("1") + " remove flag"); 
System.out.println(" collcetion "+ modifiableList); 

Risposta:

vero rimuovere bandiera

collcetion [2, 3, 4]

+0

Dato che l'operazione 'List.remove()' prende un indice, penso che dovrebbe essere 'modifiableList.remove (0)'. –

+1

Ehi @NickMaynard, funziona sia con gli indici: https://docs.oracle.com/javase/8/docs/api/java/util/List.html#remove-int- e con valori: https: // docs .oracle.com/javase/8/docs/api/java/util/List.html # remove-java.lang.Object- –

+0

Hai assolutamente ragione - scuse :) –

23

Piccola correzione: no, non è una collezione non modificabile. Semplicemente non supporta l'aggiunta e la rimozione di elementi, perché è supportato dall'array e gli array forniti non sono ridimensionabili. Ma supporta operazioni come list.set(index, element)

+1

non capisco perché funziona, ma grazie Sean ;-) – Michel

+2

@Michel la maggior parte del il lavoro è svolto da java.util.AbstractList, ma tutti i metodi facoltativi di quella lanciano UnsupportedOperationException. Implementazioni pubbliche come ArrayList sovrascrivono questi metodi no-op, ma l'implementazione interna 'Collections $ Arraylist' usata da' Arrays.asList (...) 'non sovrascrive il metodo add. (ma sovrascrive il metodo impostato sopra menzionato) –

1

ho avuto questo problema, perché Stavo anche inizializzando la mia lista con Arrays.asList:

List<String> names = Arrays.asList("a", "b", "c"); 

per risolvere il problema, ho usato addAll invece:

List<String> names = new ArrayList<String>(); 
names.addAll(Arrays.asList("a", "b", "c")); 

In questo modo è possibile modificare l'elenco, aggiungere nuovi elementi o rimuovere.

Problemi correlati