1. 概要

このチュートリアルでは、プリミティブ整数値を含むリストを作成する方法を学習します

コアJavaと外部ライブラリを使用したソリューションを検討します。

2. オートボクシング

Javaでは、 generictype引数は参照型である必要があります。 これは、リストのようなことはできないことを意味します

代わりに、 リストオートボクシングを利用します。 オートボクシング私たちが使用するのに役立ちますリストプリミティブが含まれているかのようにインターフェイス int 値。 内部的には、それはまだオブジェクトのコレクションであり、プリミティブではありません。

コアJavaソリューションは、汎用コレクションでプリミティブを使用できるようにするための調整にすぎません。 さらに、には、ボクシングとアンボクシングの変換のコストが伴います。

ただし、Javaおよび追加のサードパーティライブラリには、使用できる他のオプションがあります。 それらの使い方を以下で見てみましょう。

3. StreamAPIの使用

多くの場合、リストを操作するだけで、実際にリストを作成する必要はありません

このような場合、リストを完全に作成する代わりに、Java8のStreamAPIを使用すると機能する場合があります。 IntSreamクラスは、順次集計操作をサポートする一連のプリミティブint要素を提供します。

例を簡単に見てみましょう。

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

IntStream.of() static メソッドは、シーケンシャルIntStreamを返します。

同様に、intsの既存の配列からIntStreamを作成できます。

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

さらに、標準のStream API操作を適用して、 ints を反復、フィルタリング、および集約できます。 たとえば、正のint値の平均を計算できます。

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

最も重要なことは、ストリームの操作中に自動ボクシングが使用されないことです。

ただし、具体的なリストが確実に必要な場合は、次のサードパーティライブラリのいずれかを確認する必要があります。

4. Troveの使用 

Troveは、Javaのプリミティブコレクションを提供する高性能ライブラリです。

TroveをMavenでセットアップするには、trov4j依存関係pom.xmlに含める必要があります。

<dependency>
    <groupId>net.sf.trove4j</groupId>
    <artifactId>trove4j</artifactId>
    <version>3.0.2</version>
</dependency>

Troveを使用すると、リスト、マップ、およびセットを作成できます。

たとえば、int値のリストを操作するためのTIntArrayList実装を備えたインターフェイスTIntListがあります。

TIntList tList = new TIntArrayList();

TIntListListを直接実装できませんが、そのメソッドは非常に類似しています。 ここで説明する他のソリューションも同様のパターンに従います。

TIntArrayListを使用する最大の利点は、パフォーマンスとメモリ消費の向上です int [] 配列内にデータを格納するため、追加のボクシング/アンボクシングは必要ありません。

5. Fastutilの使用

プリミティブを操作するもう1つの高性能ライブラリは、Fastutilです。 fastutil依存関係を追加しましょう。

<dependency>
    <groupId>it.unimi.dsi</groupId>
    <artifactId>fastutil</artifactId>
    <version>8.1.0</version>
</dependency>

これで、使用する準備が整いました。

IntArrayList list = new IntArrayList();

デフォルトのコンストラクターIntArrayList()は、デフォルトの容量16でプリミティブの配列を内部的に作成します。  同様に、既存の配列から初期化できます。

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

6. コルトの使用

Coltはオープンソースであり、科学技術コンピューティング用の高性能ライブラリです cern.colt パッケージには、次のようなプリミティブデータ型を保持するサイズ変更可能なリストが含まれています。 int

まず、colt依存関係を追加しましょう。

<dependency>
    <groupId>colt</groupId>
    <artifactId>colt</artifactId>
    <version>1.2.0</version>
</dependency>

このライブラリを提供するプリミティブリストはcern.colt.list.IntArrayList:です。

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

デフォルトの初期容量は10です。

7. グアバの使用

Guavaは、プリミティブ配列とコレクションAPIの間でインターフェースをとるさまざまな方法を提供します。 com.google.common.primitives パッケージには、プリミティブタイプに対応するためのすべてのクラスが含まれています。

たとえば、 ImmutableIntArray クラスを使用すると、int要素の不変リストを作成できます。

次のint値の配列があるとします。

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

配列を使用してリストを作成するだけです。

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

さらに、それは私たちが期待するすべての標準的なメソッドを備えたリストAPIを提供します。

8. 結論

この簡単な記事では、プリミティブ整数を使用してリストを作成する複数の方法を示しました。 この例では、Trove、Fastutil、Colt、およびGuavaライブラリを使用しました。

いつものように、この記事の完全なコードは、GitHubから入手できます。