one - Was ist der kürzeste Weg, um die Liste der Strings in Java zu initialisieren?



java initialize array with values (5)

Java 9+

Java 9 führt eine bequeme Methode List.of die wie folgt verwendet wird:

List<String> l = List.of("s1", "s2", "s3");

Java 8 und älter

Hier sind einige Alternativen:

// Short, but the resulting list is fixed size.
List<String> list1 = Arrays.asList("s1", "s2", "s3");

// Similar to above, but the resulting list can grow.
List<String> list2 = new ArrayList<>(Arrays.asList("s1", "s2", "s3"));

// Using initialization block. Useful if you need to "compute" the strings.
List<String> list3 = new ArrayList<String>() {{
    add("s1");
    add("s2");
    add("s3");
}};


Wenn es sich um Arrays handelt, können Sie sie am Deklarationspunkt wie folgt initialisieren:

String[] arr = { "s1", "s2", "s3" };

Wenn Sie es erneut initialisieren oder erstellen müssen, ohne es in einer Variablen zu speichern, müssen Sie dies tun

new String[] { "s1", "s2", "s3" }

Wenn die String-Konstanten jedoch may sind, würde es so aussehen

String[] arr = { "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10",
                 "s11", "s12", "s13" };

In diesen schreibe ich meistens lieber

String[] arr = "s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13".split(",");

Ich suche den kürzesten Weg (im Code), um eine Liste von Strings und ein Array von Strings zu initialisieren, dh Liste / Array, die String-Elemente "s1", "s2", "s3" enthält.


Answer #1

Es gibt verschiedene Möglichkeiten. Persönlich mag ich Guava :

List<String> strings = Lists.newArrayList("s1", "s2", "s3");

(Guava ist natürlich eine Bibliothek wert :)

Wenn Sie nur das JDK verwenden, können Sie Folgendes verwenden:

List<String> strings = Arrays.asList("s1", "s2", "s3");

Beachten Sie, dass dies eine ArrayList , dies ist jedoch nicht die normale java.util.ArrayList - es ist eine interne, die veränderbar ist, aber eine feste Größe hat.

Ich persönlich bevorzuge die Guava-Version, da sie klar macht, was los ist (die Listenimplementierung, die zurückgegeben wird). Es ist auch immer noch klar, was passiert, wenn Sie die Methode statisch importieren:

// import static com.google.common.collect.Lists.newArrayList;
List<String> strings = newArrayList("s1", "s2", "s3");

... wenn Sie asList statisch importieren, asList es etwas ungerade aus.

Eine weitere Guava-Option, wenn Sie keine in irgendeiner Weise änderbare Liste möchten:

ImmutableList<String> strings = ImmutableList.of("s1", "s2", "s3");

Ich möchte normalerweise entweder eine vollständig veränderliche Liste (in diesem Fall ist Lists.newArrayList am besten) oder eine vollständig unveränderliche Liste (in diesem Fall ist ImmutableList.of am besten). Es ist selten, dass ich wirklich eine veränderliche Liste mit fester Größe möchte .


Answer #2

JDK2

List<String> list = Arrays.asList("one", "two", "three");

JDK7

//diamond operator
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");

JDK8

List<String> list = Stream.of("one", "two", "three").collect(Collectors.toList());

JDK9

List<String> list = List.of("one", "two", "three");

Außerdem gibt es viele andere Möglichkeiten, die von anderen Bibliotheken wie Guava bereitgestellt werden.


Answer #3

Mit Eclipse Collections können Sie Folgendes schreiben:

List<String> list = Lists.mutable.with("s1", "s2", "s3");

Sie können sich auch genauer auf die Typen beziehen und ob sie veränderlich oder unveränderlich sind.

MutableList<String> mList = Lists.mutable.with("s1", "s2", "s3");
ImmutableList<String> iList = Lists.immutable.with("s1", "s2", "s3");

Sie können dasselbe auch mit Sets, Taschen und Karten machen:

Set<String> set = Sets.mutable.with("s1", "s2", "s3");
MutableSet<String> mSet = Sets.mutable.with("s1", "s2", "s3");
ImmutableSet<String> iSet = Sets.immutable.with("s1", "s2", "s3");

Bag<String> bag = Bags.mutable.with("s1", "s2", "s3");
MutableBag<String> mBag = Bags.mutable.with("s1", "s2", "s3");
ImmutableBag<String> iBag = Bags.immutable.with("s1", "s2", "s3");

Map<String, String> map = 
    Maps.mutable.with("s1", "s1", "s2", "s2", "s3", "s3");
MutableMap<String, String> mMap = 
    Maps.mutable.with("s1", "s1", "s2", "s2", "s3", "s3");
ImmutableMap<String, String> iMap = 
    Maps.immutable.with("s1", "s1", "s2", "s2", "s3", "s3");

Es gibt auch Fabriken für SortedSets, SortedBags und SortedMaps.

SortedSet<String> sortedSet = SortedSets.mutable.with("s1", "s2", "s3");
MutableSortedSet<String> mSortedSet = SortedSets.mutable.with("s1", "s2", "s3");
ImmutableSortedSet<String> iSortedSet = SortedSets.immutable.with("s1", "s2", "s3");

SortedBag<String> sortedBag = SortedBags.mutable.with("s1", "s2", "s3");
MutableSortedBag<String> mSortedBag = SortedBags.mutable.with("s1", "s2", "s3");
ImmutableSortedBag<String> iSortedBag = SortedBags.immutable.with("s1", "s2", "s3");

SortedMap<String, String> sortedMap =
        SortedMaps.mutable.with("s1", "s1", "s2", "s2", "s3","s3");
MutableSortedMap<String, String> mSortedMap =
        SortedMaps.mutable.with("s1", "s1", "s2", "s2", "s3","s3");
ImmutableSortedMap<String, String> iSortedMap =
        SortedMaps.immutable.with("s1", "s1", "s2", "s2", "s3","s3");

Hinweis: Ich bin ein Committer für Eclipse-Sammlungen.


Answer #4
List<String> stringList = Arrays.asList("s1", "s2", "s3");

Alle diese Objekte sind im JDK vorhanden.

PS: Wie aioobe feststellt, macht dies die Liste von fester Größe.





initialization