3312 Stimmen

Initialisierung einer ArrayList in einer Zeile

Ich wollte eine Liste von Optionen zu Testzwecken erstellen. Zuerst habe ich dies getan:

ArrayList<String> places = new ArrayList<String>();
places.add("Buenos Aires");
places.add("Córdoba");
places.add("La Plata");

Dann habe ich den Code wie folgt umstrukturiert:

ArrayList<String> places = new ArrayList<String>(
    Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

Gibt es eine bessere Möglichkeit, dies zu tun?

43 Stimmen

Wenn dies für Unit-Tests gedacht ist, sollten Sie Groovy einmal ausprobieren. Sie können Ihren Testcode in Groovy schreiben, während Sie Java-Code testen, und mit ArrasyList<String> places = ["Buenos Aires", "Córdoba", "La Plata"]

5 Stimmen

In Java SE 7 können Sie den parametrisierten Typ des Konstruktors durch eine leere Menge von Typparametern (<>) ersetzen: Map<String, List<String>> myMap = new HashMap<>();

2 Stimmen

8voto

user439407 Punkte 1566

(Sollte ein Kommentar sein, aber zu lang, daher neue Antwort). Wie andere bereits erwähnt haben, ist die Arrays.asList Methode hat eine feste Größe, aber das ist nicht das einzige Problem. Sie kann auch nicht sehr gut mit Vererbung umgehen. Nehmen wir zum Beispiel an, Sie haben das Folgende:

class A{}
class B extends A{}

public List<A> getAList(){
    return Arrays.asList(new B());
}

Das obige Ergebnis führt zu einem Compilerfehler, da List<B> (das ist das, was von Arrays.asList zurückgegeben wird) ist keine Unterklasse von List<A> obwohl Sie Objekte des Typs B zu einer List<A> Objekt. Um dies zu umgehen, müssen Sie etwas tun wie:

new ArrayList<A>(Arrays.<A>asList(b1, b2, b3))

Dies ist wahrscheinlich der beste Weg, dies zu tun, vor allem, wenn Sie eine unbegrenzte Liste benötigen oder Vererbung verwenden müssen.

6voto

Ran Adler Punkte 3315
List<String> names = Arrays.asList("2","@2234","21","11");

6voto

rashedcs Punkte 3145

Sie können die folgenden Aussagen verwenden:

Code-Schnipsel:

String [] arr = {"Sharlock", "Homes", "Watson"};

List<String> names = Arrays.asList(arr);

5voto

Ozzy Punkte 8007

Wie Tom sagte :

List<String> places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");

Aber da Sie sich beschwert haben, dass Sie eine ArrayList wollen, sollten Sie zunächst wissen, dass ArrayList eine Unterklasse von List ist und Sie könnten einfach diese Zeile hinzufügen:

ArrayList<String> myPlaces = new ArrayList(places);

Allerdings könnten Sie sich dann über die "Leistung" beschweren.

In diesem Fall macht es für mich keinen Sinn, warum Ihre Liste nicht als Array definiert wurde, da sie vordefiniert ist (da die Größe zum Zeitpunkt der Initialisierung bekannt ist). Und wenn das eine Option für Sie ist:

String[] places = {"Buenos Aires", "Córdoba", "La Plata"};

Falls Ihnen die geringen Leistungsunterschiede egal sind, können Sie auch ganz einfach ein Array in eine ArrayList kopieren:

ArrayList<String> myPlaces = new ArrayList(Arrays.asList(places));

Okay, aber in Zukunft brauchen Sie mehr als nur den Ortsnamen, Sie brauchen auch einen Ländercode. Wenn man davon ausgeht, dass es sich um eine vordefinierte Liste handelt, die sich während der Laufzeit nie ändert, dann ist es passend, eine enum Dies würde eine Neukompilierung erfordern, wenn die Liste in Zukunft geändert werden soll.

enum Places {BUENOS_AIRES, CORDOBA, LA_PLATA}

werden würde:

enum Places {
    BUENOS_AIRES("Buenos Aires",123),
    CORDOBA("Córdoba",456),
    LA_PLATA("La Plata",789);

    String name;
    int code;
    Places(String name, int code) {
      this.name=name;
      this.code=code;
    }
}

Enum's haben eine statische values Methode, die ein Array zurückgibt, das alle Werte der Aufzählung in der Reihenfolge enthält, in der sie deklariert sind, z. B.:

for (Places p:Places.values()) {
    System.out.printf("The place %s has code %d%n",
                  p.name, p.code);
}

In diesem Fall würde ich vermuten, dass Sie Ihre ArrayList nicht benötigen.

P.S. Randyaa demonstriert eine weitere gute Möglichkeit, die statische Dienstprogramm-Methode zu verwenden Collections.addAll .

4voto

Akash Manngroliya Punkte 181

Ja, mit Hilfe von Arrays können Sie eine Array-Liste in einer Zeile initialisieren,

List<String> strlist= Arrays.asList("aaa", "bbb", "ccc");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X