web-dev-qa-db-ja.com

プリミティブintのリストを作成しますか?

プリミティブintまたはJavaのプリミティブのリストを作成する方法はありますか?

List<int> myList = new ArrayList<int>();

List myList = new ArrayList();ができるようです

このリストに「int」を追加します。しかし、これは、このリストに何でも追加できることを意味します。

私の唯一のオプションは、intの配列を作成してリストに変換するか、整数オブジェクトのリストを作成することですか?

74
Susie

Javaでは、変数の型はプリミティブ型または参照型のいずれかです。ジェネリック型引数は参照型である必要があります。プリミティブはObjectを拡張しないため、パラメーター化された型のジェネリック型引数として使用できません。

代わりに、Integerのラッパーであるintクラスを使用します。

List<Integer> list = new ArrayList<Integer>();

Java 7を使用している場合、ダイヤモンド演算子を使用してこの宣言を簡素化できます。

List<Integer> list = new ArrayList<>();

Javaのオートボクシングでは、必要に応じてプリミティブ型intIntegerになります。

オートボクシングは、Javaコンパイラがプリミティブ型とそれに対応するオブジェクトラッパークラス間で行う自動変換です。

したがって、次のことが有効です。

int myInt = 1;
List<Integer> list = new ArrayList<Integer>();
list.add(myInt);

System.out.println(list.get(0)); //prints 1
115
Kevin Bowersox

Java Collection Frameworkが使用されている場合、プリミティブ型を含むことができるコレクションはありません。

ただし、次のようなプリミティブ型をサポートする他のJavaコレクションがあります。 TroveColtFastutil 、- グアバ

Trove Libraryを使用した場合、intを含むarraylistの例は次のとおりです。

 TIntArrayList list= new TIntArrayList();

Javaコレクションからの整数のArrayListと比較した場合、このリストのパフォーマンスは、対応する整数ラッパークラスへのオートボクシング/アンボクシングが必要ないため、はるかに優れています。

23
Mike B

プリミティブintまたはJavaのプリミティブのリストを作成する方法はありますか

いいえ、できません。 IntegerString、またはカスタムタイプなどの参照タイプのリストのみを作成できます。

List myList = new ArrayList();を実行して、このリストに「int」を追加できるようです。

このリストにintを追加すると、Integerラッパータイプに自動的にボックス化されます。しかし、新しいコードでraw型リストを使用すること、またはそのためのジェネリック型を使用することは悪い考えです。

このリストには何でも追加できます。

もちろん、それはrawタイプを使用することの欠点です。 恐竜をすべて1つのコンテナに入れることができます。

私の唯一のオプションは、intの配列を作成し、それをリストに変換することです

その場合も、List<Integer>のみを取得します。 List<int>またはプリミティブを作成する方法はありません。

とにかく気にしないでください。 List<Integer>でも、intプリミティブ型を追加できます。以下の例のように、自動的にボックス化されます。

List<Integer> list = new ArrayList<Integer>();
list.add(5);
9
Rohit Jain

ApacheフレームワークからArrayIntListを使用してみてください。プリミティブなintを保持できることを除いて、arraylistとまったく同じように機能します。

詳細はこちら-

https://commons.Apache.org/dormant/commons-primitives/apidocs/org/Apache/commons/collections/primitives/ArrayIntList.html

6
stolen_leaves

これは不可能です。 Java仕様は、ジェネリックでのプリミティブの使用を禁止しています。ただし、iがボクシングのおかげでintである場合は、ArrayList<Integer>を作成し、add(i)を呼び出すことができます。

5
Andrey Akhmetov

Eclipse Collections で利用可能なプリミティブコレクションを使用できます。 Eclipseコレクションには、すべてのプリミティブに対してListSetBag、およびMapがあります。プリミティブコレクションの要素はプリミティブとして維持され、ボクシングは行われません。

IntList は次のように初期化できます。

MutableIntList ints = IntLists.mutable.empty();

次のようにList<Integer>からIntListに変換できます。

List<Integer> integers = new ArrayList<>();
MutableIntList ints = ListAdapter.adapt(integers).collectInt(each -> each);

注:私はEclipse Collectionsの寄稿者です。

4

コレクションは、 参照型 またはウィルカードのいずれかをサポートするジェネリックを使用します。ただし、Integerラッパーを使用できます

List<Integer> list = new ArrayList<>();
2
Reimeus

Integer []配列をint []配列に変換する方法はありますか?

Javaコアライブラリからのこの大幅な省略は、私がこれまで取り組んでいるほとんどすべてのプロジェクトで発生するようです。 Troveライブラリは便利かもしれませんが、LGPLライブラリを静的にリンクするAndroidアプリのLPGLを満たすための厳密な要件を解析することはできません)。そして、これらのクラスを取得するためにApacheソースをリッピングして削除するのは単純に不便です。より良い方法が必要です。

0
Robin Davies

Javaの開発にAndroidを使用する場合は、SparseIntArrayintの間のオートボクシングを防ぐためにIntegerを使用することをお勧めします。

Android開発者向けドキュメントSparseIntArrayの詳細情報とAndroidのオートボクシングの適切な説明を見つけることができます リンクの説明をここに入力してください

0
Stefan Medack

さらに、最近のBaeldungの記事で Javaのプリミティブ整数値のリスト の適切な要約を見つけることができます。

0
mherBaghinyan