# java.lang.UnsupportedOperationException



## Guest (17. Jul 2006)

```
String[] test = {"1", "2"};
List list = Arrays.asList(test);
list.add("3");
```

--> java.lang.UnsupportedOperationException

Warum geht das nicht? Andere Lösung

Brauch halt ne Liste wegen der komfortablen contains-Methode.


----------



## Murray (17. Jul 2006)

Arrays#asList erzeugt eine Liste, deren Größe nachträglich nicht verändert werden kann.

So sollte es gehen:

```
String[] test = {"1", "2"};
List list = new ArrayList(test.length);
for ( int i=0; i<test.length; i++) list.add( test[i]); //--- JDK >= 1.5 auch: for (String str : test) list.add( str);
list.add("3");
```


----------



## Leroy42 (17. Jul 2006)

Schau in die API-Doc


			
				API-Doc zu asList hat gesagt.:
			
		

> This method also provides a convenient way to create a *fixed-size list* initialized to contain several elements



Du mußt eine andere Datenstruktur (ArrayList, LinkedList) nehmen, die diese _fixed-sized-List_ in ihrem
Konstruktor übergeben bekommt.

Ob eine änderbare Liste *direkt* erzeugt werden kann, weiß ich nicht.

Edit: Daß eine fixed-sized-List erzeugt wird, liegt vor allem daran, daß die Liste mit dem
Array in eine Richtung _verschränkt_ wird, also Änderungen an der Liste auch das
Array verändern. Beispiel:


```
import java.util.*;

class A {
	public static void main(String[] args) {
		String[] test = {"1", "2"};
		List list = Arrays.asList(test);
		list.set(1, "42");
		for (String t : test)
			System.out.println(t);
	}
}
```
liefert

```
1
42
```

(Das wußte ich seit ein paar Minuten allerdings auch nicht  :shock: )


----------



## SlaterB (17. Jul 2006)

tja, hier wird halt gespart, keine ganz neue Liste erzeugt und alle Elemente kopiert sondern nur ein 'kleiner' Wrapper gebastelt, der auf dem vorhandenen Array weiterarbeitet,

in das vorhandene Array kann daher nix neues eingefüt werden,

wenn du dagegen list.set(0,"3"); machst, dann wird das vorhandene Array test geändert,

insofern steht hier also wirklich das Array im Mittelpunkt,

------
falls du eine ganz neue Liste haben willst wirst du wohl um die Zeilen
new ArrayList + Schleife mit add 
nicht drumherumkommen,

oder ist doch dafür irgendwo eine Operation versteckt? brauche ich auch manchmal


----------



## Leroy42 (17. Jul 2006)

Hehe! So ganz durchdacht ist das Konzept aber auch nicht   

```
int[] test = {1,2};
	List list = Arrays.asList(test);
	list.set(0, 42);
```
liefert zur Laufzeit eine ArrayStoreException, da die 42 nicht _autoungeboxed_ wird.

Ein kleiner Boolean in einer der gelieferten Klasse, der weiß ob das
Originalarray aus primitiven Daten oder bereits Wrappern bestand,
würde da doch schon reichen.  ???:L


----------

