Arrays.asList() - Problem

Crian

Top Contributor
Java:
import java.util.Arrays;
import java.util.List;

public class ArraysToListProblem {

    public static void main(String[] args) {
        String line = "eins\tzwei\tdrei";
        List<String> parts = Arrays.asList(line.split("\t"));
        parts.add("");
        System.out.println(parts);
    }

}

wirft

Code:
Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(Unknown Source)
	at java.util.AbstractList.add(Unknown Source)
	at javathings.ArraysToListProblem.main(ArraysToListProblem.java:11)

Beim Versuch etwas an die generierte Liste anzuhängen. Ist diese irgendwie abgeschlossen?

Kopiert man die Liste NOCHMAL um, per [c]List<String> parts2 = new ArrayList<String>(parts);[/c], funktioniert es. Elegant ist allerdings anders.
 
Ja, steht auch implizit in der API:
Returns a fixed-size list backed by the specified array. (Changes to the returned list "write through" to the array.) This method acts as bridge between array-based and collection-based APIs, in combination with Collection.toArray(). The returned list is serializable and implements RandomAccess.
 
Das klingt für manche Zwecke elegant, für meinen ist es das ganz und gar nicht. Nicht nur das split ein (für mich) nutzloses Array erzeugt, nun kann ich das ganze auch noch doppelt herum kopieren, nur um es in eine normale Liste zu bekommen. Naja. Zeit für ein eigenes split was das Gedöns kapselt.

Trortzdem danke für die Antwort.
 
Als Grundregeln kannst du dir merken:
Wenn eine Methode mit as... beginnt, dann wird die Originalstruktur nur anders dargestellt, aber nciht verändert. man kann also ein Array als List darstellen, deswegen hat sie immer noch eine fixe größe wie das zugrundeliegende Array.

Wenn eine Method mit to... beginnt, bekommst du eine neues, unabhängiges Objkt zurück.

Es gibt keine Arrays.toList Methode, man würde das zB. folgendermassen erledigen:
Java:
List<String> parts =  
              new ArrayList<String>(Arrays.asList(line.split("\t"));
 

Zurück
Oben