Popis primitivnih cijelih vrijednosti na Javi

1. Pregled

U ovom vodiču, naučit ćemo kako sastaviti popis koji sadrži primitivne cijele vrijednosti.

Istražit ćemo rješenja koristeći jezgru Java i vanjske knjižnice.

2. Autoboxing

U Javi, argumenti generičkog tipa moraju biti referentni tipovi. To znači da ne možemo učiniti nešto slično Popis.

Umjesto toga, možemo koristiti Popis i iskoristite prednost autoboksa. Autoboxing nam pomaže koristiti Popis sučelje kao da sadrži primitivno int vrijednosti. Ispod haube je još uvijek zbirka Predmeti a ne primitivci.

Osnovno Java rješenje samo je prilagodba za mogućnost korištenja primitiva s generičkim zbirkama. Štoviše, dolazi s cijenom pretvaranja boksa i raspakiranja.

Međutim, postoje druge mogućnosti u Javi i dodatne biblioteke trećih strana koje možemo koristiti. Pogledajmo kako ih koristiti u nastavku.

3. Korištenje Stream API-ja

Često zapravo ne trebamo stvarati popis onoliko koliko samo trebamo operirati.

U tim bi slučajevima moglo poslužiti upotreba API-ja Stream Java 8 umjesto da uopće napravite popis. The IntSream klasa pruža niz primitivnih int elementi koji podržavaju sekvencijalne agregatne operacije.

Kratko ćemo pogledati primjer:

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

The IntStream.of ()statički metoda vraća sekvencijalni IntStream.

Slično tome, možemo stvoriti IntStream iz postojećeg niza inti:

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

Štoviše, možemo primijeniti standardne Stream API operacije za ponavljanje, filtriranje i agregiranje inti. Na primjer, možemo izračunati prosjek pozitivnog int vrijednosti:

NeobveznoDvostruki prosjek = stream.filter (i -> i> 0) .average ();

Najvažnije, ne koristi se autoboxing tijekom rada s potocima.

Iako, ako nam definitivno treba konkretan popis, htjeli bismo pogledati jednu od sljedećih knjižnica trećih strana.

4. Korištenje Trovea

Trove je knjižnica visokih performansi koja pruža primitivne zbirke za Javu.

Da bismo postavili Trove s Mavenom, moramo uključiti trov4j ovisnost u našem pom.xml:

 net.sf.trove4j trove4j 3.0.2 

S Troveom, možemo stvoriti popise, karte i skupove.

Na primjer, postoji sučelje TIntList sa svojim TIntArrayList implementacija za rad s popisom int vrijednosti:

TIntList tList = novi TIntArrayList ();

Čak iako TIntList ne mogu izravno provesti Popis, to su metode vrlo usporedive. I druga rješenja o kojima raspravljamo slijede sličan obrazac.

Najveća korist od korištenja TIntArrayList je poboljšanje performansi i potrošnje memorije. Nije potrebno dodatno boksanje / raspakiranje jer pohranjuje podatke unutar int [] niz.

5. Korištenje Fastutila

Još jedna knjižnica visokih performansi za rad s primitivima je Fastutil. Dodajmo i fastutil ovisnost:

 it.unimi.dsi fastutil 8.1.0 

Sada smo spremni za upotrebu:

Popis IntArrayList = novi IntArrayList ();

Zadani konstruktor IntArrayList () interno kreira niz primitiva sa zadanim kapacitetom 16. U istom smislu, možemo ga inicijalizirati iz postojećeg niza:

int [] primitivi = novi int [] {5, 10, 0, 2, -8}; Popis IntArrayList = novi IntArrayList (primitivi);

6. Korištenje Colta

Colt je otvoreni izvor, knjižnica visokih performansi za znanstveno i tehničko računanje. The cern.colt paket sadrži popise koji se mogu mijenjati i sadrže primitivne vrste podataka kao što su int.

Prvo, dodajmo ždrijebe ovisnost:

 kolt kolt 1.2.0 

Primitivni popis koji nudi ovu knjižnicu je cern.colt.list.IntArrayList:

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

Zadani početni kapacitet je deset.

7. Korištenje Guave

Guava pruža brojne načine povezivanja između primitivnih nizova i API-ja za prikupljanje. The com.google.common.primitive paket sadrži sve klase za smještaj primitivnih tipova.

Na primjer, ImmutableIntArray klasa omogućuje nam stvaranje nepromjenjivog popisa int elementi.

Pretpostavimo, imamo sljedeći niz od int vrijednosti:

int [] primitivi = novi int [] {5, 10, 0, 2};

Jednostavno možemo stvoriti popis s nizom:

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

Nadalje, nudi API popisa sa svim standardnim metodama koje bismo očekivali.

8. Zaključak

U ovom kratkom članku, pokazali smo više načina za stvaranje popisa s primitivnim cijelim brojevima. U našim smo primjerima koristili knjižnice Trove, Fastutil, Colt i Guava.

Kao i obično, cjeloviti kôd za ovaj članak dostupan je na GitHubu.