Liste over primitive heltallverdier i Java

1. Oversikt

I denne veiledningen, vi lærer hvordan vi lager en liste som inneholder primitive heltallverdier.

Vi vil utforske løsninger ved hjelp av kjerne Java og eksterne biblioteker.

2. Autoboksing

I Java må generiske typeargumenter være referansetyper. Dette betyr at vi ikke kan gjøre noe sånt Liste.

I stedet kan vi bruke Liste og dra nytte av autoboksing. Autoboksing hjelper oss med å bruke Liste grensesnitt som om den inneholdt primitiv int verdier. Under panseret er det fremdeles en samling av Objekter og ikke primitiver.

Kjernens Java-løsning er bare en justering for å kunne bruke primitive med generiske samlinger. Videre den kommer med kostnadene for boksing og unboxing-konvertering.

Imidlertid er det andre alternativer i Java og andre tredjepartsbiblioteker som vi kan bruke. La oss se hvordan du bruker dem nedenfor.

3. Bruke Stream API

Ofte trenger vi faktisk ikke lage en liste så mye som vi bare trenger å operere på det.

I disse tilfellene kan det fungere å bruke Java 8s Stream API i stedet for å opprette en liste helt. De IntSream klasse gir en sekvens av primitive int elementer som støtter sekvensielle aggregatoperasjoner.

La oss se raskt på et eksempel:

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

De IntStream.of ()statisk metoden returnerer en sekvensiell IntStream.

På samme måte kan vi lage en IntStream fra et eksisterende utvalg av ints:

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

Videre kan vi bruke standard Stream API-operasjoner for å itere, filtrere og samle ints. For eksempel kan vi beregne gjennomsnittet av det positive int verdier:

Valgfritt Dobbelt gjennomsnitt = stream.filter (i -> i> 0). Gjennomsnittlig ();

Viktigst, ingen autoboksing brukes mens du jobber med bekkene.

Selv om vi definitivt trenger en konkret liste, vil vi ta en titt på et av følgende tredjepartsbiblioteker.

4. Bruke Trove

Trove er et høyytelsesbibliotek som tilbyr primitive samlinger for Java.

For å sette opp Trove with Maven, må vi inkludere trov4j avhengighet i vår pom.xml:

 net.sf.trove4j trove4j 3.0.2 

Med Trove, vi kan lage lister, kart og sett.

For eksempel er det et grensesnitt TIntList med dens TIntArrayList implementering for å jobbe med en liste over int verdier:

TIntList tList = ny TIntArrayList ();

Selv om TIntList kan ikke implementere direkte Liste, metodene er veldig sammenlignbare. Andre løsninger som vi diskuterer følger et lignende mønster.

Den største fordelen med å bruke TIntArrayList er ytelse og minneforbruk gevinster. Ingen ekstra boksing / unboxing er nødvendig da den lagrer dataene inne i en int [] array.

5. Bruke Fastutil

Et annet høytytende bibliotek for å jobbe med primitivene er Fastutil. La oss legge til fastutil avhengighet:

 it.unimi.dsi fastutil 8.1.0 

Nå er vi klare til å bruke den:

IntArrayList-liste = ny IntArrayList ();

Standardkonstruktøren IntArrayList () internt oppretter en rekke primitiver med standard kapasitet på 16. På samme måte kan vi initialisere det fra en eksisterende matrise:

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

6. Bruke Colt

Colt er en åpen kildekode, et høyytelsesbibliotek for vitenskapelig og teknisk databehandling. De cern.colt pakken inneholder resizable lister med primitive datatyper som int.

La oss først legge til colt avhengighet:

 colt colt 1.2.0 

Den primitive listen som tilbyr dette biblioteket er cern.colt.list.IntArrayList:

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

Standard startkapasitet er ti.

7. Bruke Guava

Guava gir en rekke måter å grensesnitt mellom primitive matriser og APIer for samling. De com.google.common.primitives pakken har alle klassene for å imøtekomme primitive typer.

For eksempel ImmutableIntArray klasse lar oss lage en uforanderlig liste over int elementer.

La oss anta at vi har følgende utvalg av int verdier:

int [] primitives = new int [] {5, 10, 0, 2};

Vi kan ganske enkelt lage en liste med matrisen:

ImmutableIntArray list = ImmutableIntArray.builder (). AddAll (primitives) .build ();

Videre gir den en liste-API med alle standardmetodene vi forventer.

8. Konklusjon

I denne raske artikkelen, vi viste flere måter å lage lister med de primitive heltallene. I eksemplene våre brukte vi Trove-, Fastutil-, Colt- og Guava-bibliotekene.

Som vanlig er den komplette koden for denne artikkelen tilgjengelig på GitHub.