15

重複の可能性:
整数を含むArrayListをプリミティブint配列に変換する方法は?

以下のコードを試しましたが、機能しません。ArrayListを配列にループコピーする必要がありますか?

int[]intArray = (int[]) integerArrayList.toArray();
4

4 に答える 4

26

プリミティブ型の配列が必要な場合は、メソッドを使用してラッパー配列からプリミティブ配列を取得できます。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);
    }
}
于 2012-10-27T09:45:26.003 に答える
9

繰り返し処理してコピーする必要があります。

int[] intArray = new int[integerArrayList.size()];
for (int i = 0; i < intArray.length; i++) {
    intArray[i] = integerArrayList.get(i);
}
于 2012-10-27T09:45:37.300 に答える
2

ループは必要ありません。また、型キャストも必要ありませんint。の宣言をに変更するだけintですIntegerint他のコードは、必要に応じて要素への自動アンボックスを使用します。

オートボクシングを見てください

// 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; }
    };

}

于 2012-10-27T10:02:01.310 に答える
1

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
于 2012-10-27T09:47:18.500 に答える