以下のコードを試しましたが、機能しません。ArrayList
を配列にループコピーする必要がありますか?
int[]intArray = (int[]) integerArrayList.toArray();
以下のコードを試しましたが、機能しません。ArrayList
を配列にループコピーする必要がありますか?
int[]intArray = (int[]) integerArrayList.toArray();
プリミティブ型の配列が必要な場合は、メソッドを使用してラッパー配列からプリミティブ配列を取得できます。Apache Commons
ArrayUtils#toPrimitive
public static int[] toPrimitive(Integer[] array)
あなたはそれをこのように使うことができます:-
int[] arr = ArrayUtils.toPrimitive((Integer[])integerArrayList.toArray());
または、配列を受け取り、そのタイプの配列のみを返す1引数バージョンのtoArrayメソッドを使用できます。そうすれば、型キャストする必要はありません。
List<Integer> myList = new ArrayList<Integer>();
Integer[] wrapperArr = myList.toArray(new Integer[myList.size()]);
// If you want a `primitive` type array
int[] arr = ArrayUtils.toPrimitive(wrapperArr);
ただし、wrapper type
アレイに問題がない場合(これは確かに問題にはなりません)、最後の手順を実行する必要はありません。
また、中間のWrapperタイプの配列を作成しなくても、プリミティブ配列を作成することもできます。そのためには、次のように書く必要があります:-loop
int[] arr = new int[myList.size()];
for(int i = 0; i < myList.size(); i++) {
if (myList.get(i) != null) {
arr[i] = myList.get(i);
}
}
繰り返し処理してコピーする必要があります。
int[] intArray = new int[integerArrayList.size()];
for (int i = 0; i < intArray.length; i++) {
intArray[i] = integerArrayList.get(i);
}
ループは必要ありません。また、型キャストも必要ありませんint
。の宣言をに変更するだけint
ですInteger
。int
他のコードは、必要に応じて要素への自動アンボックスを使用します。
オートボクシングを見てください
// List adapter for primitive int array public static List<Integer> asList(final int[] a) { return new AbstractList<Integer>() { public Integer get(int i) { return a[i]; } // Throws NullPointerException if val == null public Integer set(int i, Integer val) { Integer oldVal = a[i]; a[i] = val; return oldVal; } public int size() { return a.length; } };
}
toArray(T[] arr)
引数のないarrayListの代わりに、arraylistのメソッドを使用する必要がありますtoArray()
。ここでそのメソッドシグネチャを参照してください。
以下のようにしてください:
ArrayList<Integer> al = new ArrayList<>();
al.add(2);
al.add(3);
Integer[] arr = al.toArray(new Integer[al.size()]);
System.out.println(arr.length);//returns 2