次のようにJavaでプリミティブintまたはプリミティブのリストを作成する方法はありますか?
List<int> myList = new ArrayList<int>();
できるようです List myList = new ArrayList();
このリストに「int」を追加します。しかし、これは、このリストに何でも追加できることを意味します。
私の唯一のオプションは、intの配列を作成し、それをリストに変換するか、Integerオブジェクトのリストを作成することですか?
次のようにJavaでプリミティブintまたはプリミティブのリストを作成する方法はありますか?
List<int> myList = new ArrayList<int>();
できるようです List myList = new ArrayList();
このリストに「int」を追加します。しかし、これは、このリストに何でも追加できることを意味します。
私の唯一のオプションは、intの配列を作成し、それをリストに変換するか、Integerオブジェクトのリストを作成することですか?
回答:
Javaでは、変数の型はプリミティブ型または参照型のいずれかです。ジェネリック型の引数は参照型でなければなりません。プリミティブは拡張しないObject
ため、パラメーター化された型のジェネリック型引数として使用できません。
代わりにInteger
、ラッパーであるクラスを使用しますint
。
List<Integer> list = new ArrayList<Integer>();
Java 7を使用している場合は、ひし形演算子を使用してこの宣言を簡略化できます。
List<Integer> list = new ArrayList<>();
Javaのオートボクシングでint
はInteger
、必要なときにプリミティブ型がになります。
自動ボクシングは、Javaコンパイラーがプリミティブ型とそれに対応するオブジェクトラッパークラスの間で行う自動変換です。
したがって、以下は有効です。
int myInt = 1;
List<Integer> list = new ArrayList<Integer>();
list.add(myInt);
System.out.println(list.get(0)); //prints 1
Java Collection Frameworkが使用されている場合、プリミティブ型を含むことができるコレクションはありません。
ただし、Trove、Colt、Fastutil、Guavaなど、プリミティブ型をサポートする他のJavaコレクションがあります。
Trove Libraryを使用した場合の、intを含むarraylistの例は次のとおりです。
TIntArrayList list= new TIntArrayList();
このリストのパフォーマンスは、Javaコレクションの整数のArrayListと比較した場合、対応する整数ラッパークラスへのオートボクシング/アンボクシングが必要ないため、はるかに優れています。
Javaでプリミティブintまたはプリミティブのリストを作成する方法はありますか
いいえ、できません。あなただけのような参照型のリストを作成することができInteger
、String
またはカスタムタイプ。
List myList = new ArrayList();
このリストに「int」を追加できるようです。
int
このリストに追加すると、Integer
ラッパータイプに自動的にボックス化されます。しかし、新しいコードでは、生の型リスト、またはそのための総称型を使用することはお勧めできません。
このリストには何でも追加できます。
もちろん、これはrawタイプを使用する場合の欠点です。Cat、Dog、Tiger、Dinosaurをすべて1つのコンテナに収めることができます。
私の唯一のオプションは、intの配列を作成し、それをリストに変換することです
その場合も、あなただけがもらえますList<Integer>
。List<int>
プリミティブを作成する方法はありません。
とにかく気にしないでください。でもList<Integer>
、int
プリミティブ型を追加できます。以下の例のように、自動的にボックス化されます。
List<Integer> list = new ArrayList<Integer>();
list.add(5);
ApacheフレームワークのArrayIntListを使用してみてください。プリミティブintを保持できることを除いて、arraylistとまったく同じように機能します。
詳細はこちら-
Eclipseコレクションで利用可能なプリミティブコレクションを使用できます。EclipseのコレクションがありList
、Set
、Bag
およびMap
すべてのプリミティブのために。プリミティブコレクションの要素はプリミティブとして維持され、ボックス化は行われません。
MutableIntList ints = IntLists.mutable.empty();
a List<Integer>
から次のIntList
ように変換できます。
List<Integer> integers = new ArrayList<>();
MutableIntList ints = ListAdapter.adapt(integers).collectInt(each -> each);
注:私はEclipseコレクションの寄稿者です。
あなたがAndroidの開発のためのJavaを使用する場合は、使用することをお勧めしますSparseIntArray
間のオートボクシング防ぐためにint
とInteger
。
詳細についてSparseIntArray
は、Android開発者向けドキュメントと、Androidでのオートボクシングの適切な説明を参照してください。ここにリンクの説明を入力してください
SparseIntArray
に多くの場合より良いオプションですが、注意するべきトレードオフがあります。「この実装は、多数のアイテムを含む可能性のあるデータ構造に適切であるようには意図されていません。通常、従来のHashMapよりも低速です...」
Javaコレクションはオブジェクトのみのコレクションである必要があります。
List<Integer> integerList = new ArrayList<Integer>();
JAVAラッパークラスの詳細は こちら!
Uは、integerListとの間でintを直接保存および取得できます。
integerList.add(intValue);
int intValue = integerList.get(i)