Liste over primitive heltalværdier i Java

1. Oversigt

I denne vejledning vi lærer, hvordan man konstruerer en liste, der indeholder primitive heltalværdier.

Vi undersøger løsninger ved hjælp af centrale Java og eksterne biblioteker.

2. Autoboxing

I Java skal generiske argumentargumenter være referencetyper. Det betyder, at vi ikke kan gøre noget lignende Liste.

I stedet kan vi bruge Liste og drage fordel af autoboxing. Autoboxing hjælper os med at bruge Liste interface som om det indeholdt primitiv int værdier. Under hætten er det stadig en samling af Objekter og ikke primitiver.

Kernens Java-løsning er bare en justering for at kunne bruge primitiver med generiske samlinger. I øvrigt, det kommer med omkostningerne ved boksning og unboxing-konverteringer.

Der er dog andre muligheder i Java og yderligere tredjepartsbiblioteker, som vi kan bruge. Lad os se, hvordan du bruger dem nedenfor.

3. Brug af Stream API

Ofte behøver vi faktisk ikke oprette en liste så meget som vi bare har brug for at operere på det.

I disse tilfælde fungerer det muligvis at bruge Java 8's Stream API i stedet for at oprette en liste helt. Det IntSream klasse giver en sekvens af primitive int elementer, der understøtter sekventielle samlede operationer.

Lad os se hurtigt på et eksempel:

IntStream stream = IntStream.of (5, 10, 0, 2, -8);

Det IntStream.of ()statisk metode returnerer en sekventiel IntStream.

På samme måde kan vi oprette en IntStream fra en eksisterende række af ints:

int [] primitiver = {5, 10, 0, 2, -8}; IntStream stream = IntStream.of (primitiver);

Desuden kan vi anvende de almindelige Stream API-operationer til at gentage, filtrere og sammenlægge ints. For eksempel kan vi beregne gennemsnittet af det positive int værdier:

Valgfrit dobbelt gennemsnit = stream.filter (i -> i> 0). Gennemsnit ();

Mest vigtigt, ingen autoboxing bruges mens du arbejder med vandløbene.

Selvom, hvis vi bestemt har brug for en konkret liste, vil vi se på et af følgende tredjepartsbiblioteker.

4. Brug af Trove

Trove er et højtydende bibliotek, der leverer primitive samlinger til Java.

For at konfigurere Trove with Maven skal vi medtage trov4j afhængighed i vores pom.xml:

 net.sf.trove4j trove4j 3.0.2 

Med Trove, vi kan oprette lister, kort og sæt.

For eksempel er der en grænseflade TIntList med sin TIntArrayList implementering for at arbejde med en liste over int værdier:

TIntList tList = ny TIntArrayList ();

Selv om TIntList kan ikke implementere direkte Liste, dets metoder er meget sammenlignelige. Andre løsninger, som vi diskuterer, følger et lignende mønster.

Den største fordel ved at bruge TIntArrayList er ydelse og hukommelsesforbrugsgevinster. Ingen yderligere boksning / unboxing er nødvendig, da den gemmer dataene inde i en int [] array.

5. Brug af Fastutil

Et andet højtydende bibliotek til at arbejde med primitiverne er Fastutil. Lad os tilføje fastutil afhængighed:

 it.unimi.dsi fastutil 8.1.0 

Nu er vi klar til at bruge det:

IntArrayList liste = ny IntArrayList ();

Standardkonstruktøren IntArrayList () internt skaber en række primitiver med standardkapaciteten på 16. På samme måde kan vi initialisere det fra et eksisterende array:

int [] primitiver = ny int [] {5, 10, 0, 2, -8}; IntArrayList liste = ny IntArrayList (primitiver);

6. Brug af Colt

Colt er en open source, et højtydende bibliotek til videnskabelig og teknisk computing. Det cern.colt pakken indeholder resizable lister indeholdende primitive datatyper såsom int.

Lad os først tilføje hingst afhængighed:

 hingsteføl 1.2.0 

Den primitive liste, der tilbyder dette bibliotek, er cern.colt.list.IntArrayList:

cern.colt.list.IntArrayList coltList = ny cern.colt.list.IntArrayList ();

Standard startkapacitet er ti.

7. Brug af Guava

Guava giver en række måder at grænseflade mellem primitive arrays og collection API'er på. Det com.google.common.primitives pakken har alle klasser til at rumme primitive typer.

F.eks Uforanderlig IntArray klasse lader os oprette en uforanderlig liste over int elementer.

Lad os antage, at vi har følgende række af int værdier:

int [] primitiver = ny int [] {5, 10, 0, 2};

Vi kan simpelthen oprette en liste med arrayet:

ImmutableIntArray liste = ImmutableIntArray.builder (). AddAll (primitiver) .build ();

Desuden giver den en liste-API med alle de standardmetoder, vi forventer.

8. Konklusion

I denne hurtige artikel vi viste flere måder at oprette lister med de primitive heltal på. I vores eksempler brugte vi bibliotekerne Trove, Fastutil, Colt og Guava.

Som sædvanlig er den komplette kode til denne artikel tilgængelig på GitHub.