Liste der primitiven Ganzzahlwerte in Java

1. Übersicht

In diesem Tutorial erfahren Sie, wie Sie eine Liste mit primitiven Ganzzahlwerten erstellen .

Wir werden Lösungen mit Java-Kernbibliotheken und externen Bibliotheken untersuchen.

2. Autoboxing

In Java müssen generische Typargumente Referenztypen sein. Das heißt, wir können so etwas wie List nicht machen .

Stattdessen können wir List verwenden und Autoboxing nutzen. Autoboxing hilft uns dabei, die List- Schnittstelle so zu verwenden, als ob sie primitive int- Werte enthält. Unter der Haube ist es immer noch eine Sammlung von Objekten und keine Grundelemente.

Die Java-Kernlösung ist nur eine Anpassung, um Grundelemente mit generischen Sammlungen verwenden zu können. Darüber hinaus fallen Kosten für das Um- und Auspacken von Boxen an.

Es gibt jedoch andere Optionen in Java und zusätzliche Bibliotheken von Drittanbietern, die wir verwenden können. Mal sehen, wie man sie unten benutzt.

3. Verwenden der Stream-API

Oft müssen wir nicht so viel Liste erstellen, wie wir nur bearbeiten müssen.

In diesen Fällen kann es funktionieren, die Stream-API von Java 8 zu verwenden, anstatt eine Liste zu erstellen. Die IntSream- Klasse bietet eine Folge primitiver int- Elemente, die sequentielle Aggregatoperationen unterstützen.

Schauen wir uns ein Beispiel kurz an:

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

Die statische Methode IntStream.of () gibt einen sequentiellen IntStream zurück .

Ebenso können wir einen IntStream aus einem vorhandenen Array von Ints erstellen :

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

Darüber hinaus können wir die Standard-Stream-API-Operationen anwenden, um die Ints zu iterieren, zu filtern und zu aggregieren . Zum Beispiel können wir den Durchschnitt der positiven int- Werte berechnen:

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

Am wichtigsten ist, dass beim Arbeiten mit den Streams kein Autoboxing verwendet wird .

Wenn wir jedoch definitiv eine konkrete Liste benötigen, sollten wir uns eine der folgenden Bibliotheken von Drittanbietern ansehen.

4. Verwenden von Trove

Trove ist eine Hochleistungsbibliothek, die primitive Sammlungen für Java bereitstellt .

Um Trove mit Maven einzurichten , müssen wir die trov4j- Abhängigkeit in unsere pom.xml aufnehmen :

 net.sf.trove4j trove4j 3.0.2 

Mit Trove können wir Listen, Karten und Sets erstellen.

Zum Beispiel gibt es eine Schnittstelle TIntList mit ihrer TIntArrayList- Implementierung, um mit einer Liste von int- Werten zu arbeiten:

TIntList tList = new TIntArrayList();

Obwohl TIntList List nicht direkt implementieren kann , sind seine Methoden sehr vergleichbar. Andere Lösungen, die wir diskutieren, folgen einem ähnlichen Muster.

Der größte Vorteil der Verwendung von TIntArrayList ist die Steigerung der Leistung und des Speicherverbrauchs . Es ist kein zusätzliches Boxen / Unboxing erforderlich, da die Daten in einem int [] -Array gespeichert werden .

5. Fastutil verwenden

Eine weitere Hochleistungsbibliothek für die Arbeit mit den Grundelementen ist Fastutil. Fügen wir die Fastutil- Abhängigkeit hinzu:

 it.unimi.dsi fastutil 8.1.0 

Jetzt können wir es verwenden:

IntArrayList list = new IntArrayList();

Der Standardkonstruktor IntArrayList () erstellt intern ein Array von Grundelementen mit der Standardkapazität von 16 . Auf die gleiche Weise können wir es aus einem vorhandenen Array initialisieren:

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

6. Colt verwenden

Colt ist eine Open Source, eine Hochleistungsbibliothek für wissenschaftliches und technisches Rechnen . Das Paket cern.colt enthält veränderbare Listen mit primitiven Datentypen wie int .

Fügen wir zunächst die Hengstfohlenabhängigkeit hinzu :

 colt colt 1.2.0 

Die primitive Liste, die diese Bibliothek anbietet, lautet cern.colt.list.IntArrayList:

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

Die Standard-Anfangskapazität beträgt zehn.

7. Verwenden von Guave

Guava bietet eine Reihe von Möglichkeiten für die Schnittstelle zwischen primitiven Arrays und Sammlungs-APIs . Das Paket com.google.common.primitives enthält alle Klassen für primitive Typen.

Mit der ImmutableIntArray- Klasse können wir beispielsweise eine unveränderliche Liste von int- Elementen erstellen .

Nehmen wir an, wir haben das folgende Array von int- Werten:

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

Wir können einfach eine Liste mit dem Array erstellen:

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

Darüber hinaus bietet es eine Listen-API mit allen Standardmethoden, die wir erwarten würden.

8. Fazit

In diesem kurzen Artikel haben wir verschiedene Möglichkeiten zum Erstellen von Listen mit den primitiven Ganzzahlen gezeigt . In unseren Beispielen haben wir die Bibliotheken Trove, Fastutil, Colt und Guava verwendet .

Wie üblich ist der vollständige Code für diesen Artikel auf GitHub verfügbar.