-2

以下のコードを試しました。1 つの配列でのみ機能します。別の配列を追加しようとすると、実行時例外がスローされます

 Exception in thread "main" java.lang.UnsupportedOperationException
   at java.util.AbstractList.add(Unknown Source)
   at java.util.AbstractList.add(Unknown Source)
    at general.ArrToArrList.main(ArrToArrList.java:32)

コードは

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;

public class ArrToArrList {
    public static void main(String[] args) {
        Integer[] nums = new Integer[5];
        nums[0] = 2;
        nums[1] = 4;
        Integer[] nm = { 3, 5, 7 };
        List intList = (Arrays.asList(nums));
        List intList2 = (Arrays.asList(nm));
        intList.addAll(Arrays.asList(nm));
        for (Integer i : intList) {
            System.out.println(i);
        }
    }
}
4

7 に答える 7

2

Listを使用して作成されArrays.asListた は固定サイズであるため、他の要素をリストに追加することはできません。次のように、新しい法線ArrayListを作成し、すべての要素をリストに追加できます。

Integer[] nums = new Integer[5];
nums[0] = 2;
nums[1] = 4;
Integer[] nm = { 3, 5, 7 };
List intList = (Arrays.asList(nums));
List intList2 = (Arrays.asList(nm));
List mergeList = new ArrayList();
mergeList .addAll(Arrays.asList(nums));
mergeList .addAll(Arrays.asList(nm));
for (Integer i : mergeList) {
    System.out.println(i);
}
于 2013-08-30T07:44:49.010 に答える
2

使用する場合

List intList = (Arrays.asList(nums)); 

次の実装を持つタイプ java.util.Arrays$ArrayList の実際のオブジェクトを提供します

public void add(int index, E element) {
    throw new UnsupportedOperationException();
}

しかし、あなたが使用する場合

List intList = new ArrayList<Integer>(Arrays.asList(nums); 

タイプ java.util.ArrayList の実際のオブジェクトが得られます。これが違いを生みます。これが実際にこの例外の原因の理由です

于 2013-08-30T08:02:12.920 に答える
0

Arrays.asList基になる配列の固定サイズのビューを返します。

指定された配列に基づく固定サイズのリストを返します。1

List配列にあるよりも多くの要素を返される要素に入れることはできません。

それを a にコピーする必要がありますjava.util.ArrayList(紛らわしいことに、同じものではないArrays.asLista を返します)。java.util.Arrays.ArrayList

final List<Integer> list = new ArrayList<Integer>(Arrays.asList(myArray));
于 2013-08-30T07:44:34.893 に答える
0

Arrays.asList から取得したリストは変更できません。そのため、new 演算子を使用して intList に割り当てる必要があります。

于 2013-08-30T07:46:08.577 に答える