Initialiser Liste i Java i en Enkelt Linje

I dette indlæg, vil vi diskutere forskellige metoder til at initialisere liste i Java i en enkelt linje.

Java kritiseres ofte for dens verbositet.,structing it, storing it in a variable, invoking add() method on it n times, and then maybe wrapping it to make it unmodifiable:

1
2
3
4
5
6
7

List<String> list = new ArrayList<>();
list.,Tilføj(“C”);
liste.Tilføj (“C++”);
liste.Tilføj (“Java”);
liste = samlinger.unmodifiableList(list);

I dette indlæg, vil vi diskutere forskellige metoder til at initialisere liste i et enkelt udtryk.

Arrays.asList ()

Arrays.asList() returnerer en liste med fast størrelse, der understøttes af det specificerede array. Da en Matri.ikke kan ændres strukturelt, er det ikke muligt at tilføje elementer til listen eller fjerne elementer fra den., The list will throw an UnsupportedOperationException if any resize operation is performed on it.

1
List<String> fixedLengthList = Arrays.,asList(“C”, “C++”, “Java”);

If we need a List that can expand or shrink, we can use –

1
List<String> list = new ArrayList<>(Arrays.,asList(“C”, “C++”, “Java”));

Java Samlinger

Samlinger klasse består af flere statiske metoder, der opererer på samlinger og vende tilbage med en ny samling, bakket op af en bestemt samling.

Collections samlinger.addAll()

Collections.addAll() tilføjer alle de angivne elementer til den angivne samling. Elementer, der skal tilføjes, kan angives individuelt eller som et array., When elements are specified individually, this method provides a convenient way to add a few elements to an existing collection:

1
2

List<String> list = Collections.EMPTY_LIST;
Collections.,addAll(liste = new ArrayList<String>(), “C”, “C++”, “Java”);

⮚ Samlinger.unmodifiableList ()

Alternativt kan man udfylde en samling ved hjælp af en kopikonstruktør fra en anden samling. En sådan metode er Collections.unmodifiableList() returnerer en umodificerbar visning af den specificerede liste. Ethvert forsøg på at ændre den returnerede liste vil resultere i en UnsupportedOperationException.

Collections samlinger.,singletonList()

Hvis vi ønsker en Liste, der kun indeholder et enkelt element, kan vi bruge Collections.singletonList(), der returnerer en uforanderlig liste, der indeholder dette element. Listen vil kaste en UnsupportedOperationException hvis nogen ændring operation udføres på det.

1
Liste<String> liste = Samlinger.,singletonList(“Java”);

Dobbelt Tandbøjle Initialisering

et Andet alternativ er at anvende “Dobbelt Tandbøjle Initialisering”. Dette skaber en anonym indre klasse med blot en instans initiali .er i det. Denne teknik bør bedst undgås, da det koster en ekstra klasse ved hver brug, og den indeholder også skjulte henvisninger til den omsluttende instans og til eventuelle optagne objekter. Dette kan forårsage hukommelseslækager eller problemer med serialisering.,v>2

3
4
5
Liste<String> liste = new ArrayList<String>() {{
tilføj(“C”);
tilføj(“C++”);
tilføj(“Java”);
}};

Java-8

Java 8 Stream API kan bruges til at konstruere små lister ved at få strøm fra statisk fabrik metoder og akkumulere input-elementer i en ny liste ved hjælp af samlere., For example,

⮚ Collectors.toList()

Collectors.toList() returns a Collector that accumulates the input elements into a new List.

1
2

List<String> list = Stream.of(“C”, “C++”, “Java”)
.collect(Collectors.toList());

⮚ Collectors.,toCollection()

The streams collectors make no guarantee on the type of the List returned by toList(). To ensure the returned List is ArrayList, we can use toCollection(Supplier) as shown below:

1
2

List<String> list = Stream.,af(“C”, “C++”, “Java”)
.indsamle (samlere.toCollection(ArrayList::new));

⮚ Samlere.collectingandderefter ()

Vi kunne tilpasse en samler til at udføre en ekstra efterbehandling transformation., For eksempel, kan vi tilpasse toList() collector til altid at producere en unmodifiable liste med:

Java 9

Java 9 gjort det nemt at skabe forekomster af listen med et lille antal elementer ved at give Lists.of() statisk fabrik metoder, der skaber kompakt, unmodifiable eksempler på det., For example,

1
List<String> unmodifiableList = List.of(“C”, “C++”, “Java”);

Java 9 provides 12 overloaded versions of this method –

Note there is a var-args version which can handle any number of elements., Nu er det indlysende spørgsmål, Hvorfor Java 9 har inkluderet så mange ekstra metoder, når kun var-args kan være tilstrækkelige? Årsagen er, at der er en subtil runtime ydeevne fordel. Var-args-versionen kører sandsynligvis langsommere end de overbelastninger, der ikke bruger varargs. Dette skyldes, at hver påkaldelse af en varargs metode vil medføre en Matri allocation tildeling og initialisering og ikke at glemme GC overhead.Javadoc har Listeinstanserne oprettet af List.of() følgende egenskaber:

  1. de er strukturelt uforanderlige., Elementer kan ikke tilføjes, fjernes eller udskiftes. At kalde en mutatormetode vil altid medføre, at UnsupportedOperationException kastes. Men hvis de indeholdte elementer selv kan ændres, kan dette medføre, at listens indhold ser ud til at ændre sig.
  2. de forbyder null-elementer. Forsøg på at oprette dem med null-elementer resulterer i NullPointerException.
  3. de kan serialiseres, hvis alle elementer kan serialiseres.
  4. rækkefølgen af elementer i listen er den samme som rækkefølgen af de angivne argumenter eller af elementerne i det angivne array.,
  5. de er værdibaserede. Opkaldere bør ikke gøre nogen antagelser om identiteten af de returnerede tilfælde. Fabrikker kan frit oprette nye tilfælde eller genbruge eksisterende. Derfor er identitetsfølsomme operationer på disse tilfælde (referencekvalitet ( = = ), identitetshashkode og synkronisering) upålidelige og bør undgås.,

If we need a List that can expand or shrink, we can use –

1
List<String> list = new ArrayList<>(List.,af(“C”, “C++”, “Java”));

bemærk, at i modsætning til statiske metoder i klasser, statiske metoder på grænseflader er ikke arvede, så det vil ikke være muligt at påberåbe sig dem via en gennemførelse af klassen eller via en instans af interface-type.

Guava

Guava giver også flere statiske hjælpemetoder vedrørende liste forekomster.,

Initialiser Liste ved hjælp af Guava i Java

Apache Commons Samlinger

Apache Commons Samlinger ListUtils klasse unmodifiableList(), der returnerer en unmodifiable liste bakket op af den angivne liste. Det kaster en NullPointerException hvis den givne liste er null og en UnsupportedOperationException hvis nogen ændre operationen udføres på det.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *