Lijst met primitieve integerwaarden in Java

1. Overzicht

In deze tutorial we zullen leren hoe we een lijst kunnen samenstellen met primitieve gehele getallen.

We zullen oplossingen verkennen met behulp van Java-kernbibliotheken en externe bibliotheken.

2. Autoboxing

In Java moeten generieke type-argumenten referentietypes zijn. Dit betekent dat we zoiets niet kunnen doen Lijst.

In plaats daarvan kunnen we gebruiken Lijst en profiteer van autoboxing. Autoboxing helpt ons de Lijst interface alsof het primitief bevat int waarden. Onder de motorkap is het nog een verzameling van Voorwerpen en niet primitieven.

De kern-Java-oplossing is slechts een aanpassing om primitieven te kunnen gebruiken met generieke collecties. Bovendien, het komt met de kosten voor het in dozen doen en uitpakken van conversies.

Er zijn echter andere opties in Java en aanvullende bibliotheken van derden die we kunnen gebruiken. Laten we hieronder kijken hoe we ze kunnen gebruiken.

3. Met behulp van de Stream API

Vaak hoeven we eigenlijk geen lijst te maken zoveel als we er alleen maar aan moeten werken.

In deze gevallen kan het werken om de Stream API van Java 8 te gebruiken in plaats van een volledige lijst te maken. De IntSream class biedt een reeks primitieve int elementen die opeenvolgende geaggregeerde bewerkingen ondersteunen.

Laten we snel een voorbeeld bekijken:

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

De IntStream.of ()statisch methode retourneert een sequentieel IntStream.

Evenzo kunnen we een IntStream uit een bestaande reeks ints:

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

Bovendien kunnen we de standaard Stream API-bewerkingen toepassen om het ints. We kunnen bijvoorbeeld het gemiddelde van het positieve berekenen int waarden:

Optioneel dubbel gemiddeld = stream.filter (i -> i> 0) .gemiddeld ();

Het allerbelangrijkste, er wordt geen autoboxing gebruikt tijdens het werken met de streams.

Als we echter zeker een concrete lijst nodig hebben, willen we een van de volgende bibliotheken van derden bekijken.

4. Trove gebruiken

Trove is een hoogwaardige bibliotheek die primitieve verzamelingen voor Java biedt.

Om Trove met Maven in te stellen, moeten we het trov4j afhankelijkheid in onze pom.xml:

 net.sf.trove4j trove4j 3.0.2 

Met Trove, we kunnen lijsten, kaarten en sets maken.

Er is bijvoorbeeld een interface TIntList met zijn TIntArrayList implementatie om te werken met een lijst van int waarden:

TIntList tList = nieuwe TIntArrayList ();

Hoewel TIntList kan niet direct implementeren Lijst, zijn methoden zijn zeer vergelijkbaar. Andere oplossingen die we bespreken, volgen een soortgelijk patroon.

Het grootste voordeel van gebruik TIntArrayList is de toename van prestaties en geheugengebruik. Er is geen extra boksen / uitpakken nodig omdat het de gegevens opslaat in een int [] array.

5. Fastutil gebruiken

Een andere krachtige bibliotheek om met de primitieven te werken, is Fastutil. Laten we de fastutil afhankelijkheid:

 it.unimi.dsi fastutil 8.1.0 

Nu zijn we klaar om het te gebruiken:

IntArrayList lijst = nieuwe IntArrayList ();

De standaard constructor IntArrayList () creëert intern een reeks primitieven met de standaardcapaciteit van 16. Op dezelfde manier kunnen we het initialiseren vanuit een bestaande array:

int [] primitieven = nieuwe int [] {5, 10, 0, 2, -8}; IntArrayList list = nieuwe IntArrayList (primitieven);

6. Met behulp van Colt

Colt is een open source, een hoogwaardige bibliotheek voor wetenschappelijk en technisch computergebruik. De cern.colt pakket bevat aanpasbare lijsten met primitieve gegevenstypen zoals int.

Laten we eerst het Colt afhankelijkheid:

 hengstveulen 1.2.0 

De primitieve lijst die deze bibliotheek biedt, is cern.colt.list.IntArrayList:

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

De standaard initiële capaciteit is tien.

7. Guava gebruiken

Guava biedt een aantal manieren om te communiceren tussen primitieve arrays en collectie-API's. De com.google.common.primitives pakket heeft alle klassen om primitieve typen te huisvesten.

Bijvoorbeeld de ImmutableIntArray class laat ons een onveranderlijke lijst maken van int elementen.

Laten we aannemen dat we de volgende reeks hebben van int waarden:

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

We kunnen eenvoudig een lijst maken met de array:

ImmutableIntArray lijst = ImmutableIntArray.builder (). AddAll (primitieven) .build ();

Bovendien biedt het een lijst-API met alle standaardmethoden die we zouden verwachten.

8. Conclusie

In dit korte artikel, we lieten meerdere manieren zien om lijsten te maken met de primitieve gehele getallen. In onze voorbeelden hebben we de bibliotheken Trove, Fastutil, Colt en Guava gebruikt.

Zoals gewoonlijk is de volledige code voor dit artikel beschikbaar op GitHub.


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