2013-08-22 4 views
20

Wir können keine <Collection>.add oder Operation an Sammlungen durchführen, die wir von Arrays.asList erhalten haben. Nur der Vorgang ist erlaubt. SoSo fügen Sie Elemente in der Liste hinzu, wenn sie verwendet werden Arrays.asList()

Was passiert, wenn ich auf ein Szenario kommen, wo ich benötigen, um neues Element hinzufügen in List ohne vorherige Elemente in List löschen?. Wie kann ich das erreichen?

+0

Warum können Sie nicht hinzufügen? 'asList' gibt eine' neue ArrayList' zurück. Oh, es ist nicht das selbe 'ArrayList' –

+4

@SotiriosDelimanolis Die von Arrays.asList zurückgegebenen Listen werden vom übergebenen Array unterstützt und sind nicht änderbar. Aus [der Dokumentation] (http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#asList (T ...)) (Hervorhebung hinzugefügt), "Gibt einen ** zurück * Liste fester Größe ***, die vom angegebenen Array unterstützt wird (Änderungen an der zurückgegebenen Liste "durchschreiben" im Array). Diese Methode fungiert als Brücke zwischen Array-basierten und sammlungbasierten APIs in Kombination mit Collection.toArray(). Die zurückgegebene Liste ist serialisierbar und implementiert RandomAccess. " –

+0

@JoshuaTaylor Hatte nicht bemerkt, es war 'java.util.Arrays.ArrayList' –

Antwort

40

Erstelle ein neues ArrayList mit dem Konstruktor:

List<String> list = new ArrayList<String>(Arrays.asList("a", "b")); 
11

Eine Möglichkeit, ein neues ArrayList zu konstruieren:

List<T> list = new ArrayList<T>(Arrays.asList(...)); 

getan zu haben, dass Sie list als Sie bitte ändern können.

2

Arrays.asList() erzeugt eine Liste, die von einem Array tatsächlich gesichert ist, und es ist eine Anordnung, die als eine Liste morphed wird. Sie können es als Liste verwenden, aber Sie können bestimmte Vorgänge nicht ausführen, z. B. neue Elemente hinzufügen. So ist die beste Option ist es passieren zu einem Konstruktor einer anderen Liste obj wie folgt aus:

List<T> list = new ArrayList<T>(Arrays.asList(...)); 
1

Sie um die Zwischen ArrayList mit Java8 bekommen Ströme:

Integer[] array = {1, 2, 3}; 
    List<Integer> list = Streams.concat(Arrays.stream(array), 
             Stream.of(4)).collect(Collectors.toList()); 

Dies sollte ziemlich effizient sein, da es kann einfach über das Array iterieren und auch die Zielliste vorbelegen. Es kann für große Arrays besser sein oder auch nicht. Wie immer, wenn es darauf ankommt, müssen Sie messen.

Verwandte Themen