A Java primitív egészértékeinek listája

1. Áttekintés

Ebben az oktatóanyagban megtanuljuk, hogyan készítsünk egy listát, amely primitív egész értékeket tartalmaz.

Megvizsgáljuk a megoldásokat az alapvető Java és külső könyvtárak segítségével.

2. Autoboxolás

A Java-ban az általános típusú argumentumoknak referenciatípusoknak kell lenniük. Ez azt jelenti, hogy nem tehetünk ilyesmit Lista.

Ehelyett használhatjuk Lista és használja ki az autoboxing előnyeit. Az autoboxolás segít a Lista interfész mintha primitívet tartalmazna int értékek. A motorháztető alatt még mindig a Tárgyak és nem primitívek.

A Java alapvető megoldása csak egy kiigazítás annak érdekében, hogy a primitíveket általános gyűjteményekkel lehessen használni. Ráadásul, a boxolás és a doboz nélküli átalakítás költsége.

Vannak azonban más opciók a Java-ban és további külső könyvtárak, amelyeket használhatunk. Az alábbiakban nézzük meg, hogyan kell használni őket.

3. A Stream API használata

Gyakran nem is kell listát készítenünk amennyit csak meg kell operálni.

Ezekben az esetekben működhet a Java 8 Stream API használata, ahelyett, hogy teljesen létrehozna egy listát. A IntSream osztály biztosítja a primitívek sorozatát int szekvenciális összesítési műveleteket támogató elemek.

Nézzünk meg egy példát gyorsan:

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

A IntStream.of ()statikus metódus szekvenciát ad vissza IntStream.

Hasonlóképpen létrehozhatunk egy IntStream létező tömbből ints:

int [] primitívek = {5, 10, 0, 2, -8}; IntStream folyam = IntStream.of (primitívek);

Ezenkívül alkalmazhatjuk a standard Stream API műveleteket az iterációra, szűrésre és összesítésre ints. Kiszámíthatjuk például a pozitív átlagát int értékek:

OpcionálisKettős átlag = folyam.szűrő (i -> i> 0) .átlag ();

A legfontosabb, nem használ autoboxingot miközben a patakokkal dolgozott.

Bár, ha mindenképpen szükségünk van egy konkrét listára, akkor meg kell néznünk a következő, harmadik féltől származó könyvtárak egyikét.

4. A Trove használata

A Trove egy nagy teljesítményű könyvtár, amely primitív gyűjteményeket biztosít a Java számára.

A Trove with Maven beállításához be kell építenünk a trov4j függőség a mi pom.xml:

 net.sf.trove4j trove4j 3.0.2 

Trove-val, létrehozhatunk listákat, térképeket és halmazokat.

Például van egy interfész TIntList azzal TIntArrayList megvalósítás a listával való együttműködéshez int értékek:

TIntList tList = új TIntArrayList ();

Annak ellenére TIntList nem tudja közvetlenül megvalósítani Lista, a módszerek nagyon összehasonlíthatók. Más általunk megvitatott megoldások is hasonló mintát követnek.

A használat legnagyobb előnye TIntArrayList a teljesítmény és a memóriafogyasztás növekedése. Nincs szükség további ökölvívásra / kicsomagolásra, mivel az adatokat egy int [] sor.

5. A Fastutil használata

Egy másik nagy teljesítményű könyvtár, amely a primitívekkel dolgozik, a Fastutil. Tegyük hozzá a fastutil függőség:

 it.unimi.dsi fastutil 8.1.0 

Most készen állunk a használatára:

IntArrayList list = new IntArrayList ();

Az alapértelmezett konstruktor IntArrayList () belsőleg létrehoz egy primitív tömböt, amelynek alapértelmezett kapacitása 16. Ugyanebben az értelemben inicializálhatjuk egy meglévő tömbből:

int [] primitívek = új int [] {5, 10, 0, 2, -8}; IntArrayList list = új IntArrayList (primitívek);

6. A Colt használata

A Colt egy nyílt forráskódú, nagy teljesítményű könyvtár tudományos és műszaki számítástechnikához. A cern.colt A csomag átméretezhető listákat tartalmaz, amelyek primitív adattípusokat tartalmaznak, például int.

Először tegyük hozzá a csikó függőség:

 csikós csikó 1.2.0 

A primitív lista, amely ezt a könyvtárat kínálja, a cern.colt.list.IntArrayList:

cern.colt.list.IntArrayList coltList = új cern.colt.list.IntArrayList ();

Az alapértelmezett kezdeti kapacitás tíz.

7. Guava használata

A Guava számos lehetőséget kínál a primitív tömbök és a gyűjtő API-k közötti kapcsolattartásra. A com.google.common.primitives A csomagban minden osztály megtalálható a primitív típusok befogadására.

Például a ImmutableIntArray osztály segítségével létrehozhatunk egy változhatatlan listát int elemek.

Tegyük fel, hogy a következő tömb van int értékek:

int [] primitívek = új int [] {5, 10, 0, 2};

Egyszerűen létrehozhatunk egy listát a tömb segítségével:

ImmutableIntArray list = ImmutableIntArray.builder (). AddAll (primitívek) .build ();

Ezenkívül biztosít egy listás API-t az összes elvárt szabványos módszerrel.

8. Következtetés

Ebben a gyors cikkben a primitív egész számokkal listák létrehozásának több módját mutattuk meg. Példáinkban a Trove, a Fastutil, a Colt és a Guava könyvtárakat használtuk.

Szokás szerint a cikk teljes kódja elérhető a GitHubon.


$config[zx-auto] not found$config[zx-overlay] not found