7

私のJavaコードでは、arraylistのリストを作成しようとしています。私のコードは、次のとおりです。

private ArrayList<Integer>[] listoflist;
listoflist = (ArrayList<Integer>[]) new Object[875715];

しかし、私がコードをコンパイルすると、コンパイラーは次のように言い続けます

[Ljava.lang.Object; [Ljava.util.ArrayList;にキャストできません。

Object[]をArrayList[]にキャストできない理由を尋ねることはできますか?

4

4 に答える 4

4

Javaは強い型付き言語であるため、ある型を別の型に単純にキャストすることはできません。ただし、それらを変換することはできます。

単に使用Object[]する場合List

Object[] arr = new Object[]{...};
List<Object> list = Arrays.asList(arr);

として使用したいArrayList場合、たとえば他の要素を追加したい場合は、単にもう一度ラップします

 ArrayList<Object> arrList = new ArrayList<Object>(Arrays.asList(arr));
于 2013-03-09T19:15:38.400 に答える
4

ArrayListsのリストを作成しようとしているとのことです。しかし...あなたはそれを行うために配列を使用しようとしています...なぜ別のArrayListを使用しないのですか?それは実際にはかなり簡単です:

private List<List<Integer>> listoflist = new ArrayList<ArrayList<Integer>>();

これを使用する例を次に示します。

ArrayList<Integer> list1 = new ArrayList<Integer>();
list1.add(Integer.valueOf(3));
list1.add(Integer.valueOf(4));
ArrayList<Integer> list2 = new ArrayList<Integer>();
list2.add(Integer.valueOf(6));
list2.add(Integer.valueOf(7));
listoflist.add(list1);
listoflist.add(list2);

何度も言うArrayList<ArrayList<Integer>>のはちょっと変なので、Java 7では、構造はただのようになりますnew ArrayList<>();(割り当てている変数から型を推測します)。

于 2013-03-09T20:09:19.933 に答える
1

ArrayListsをArrayListsに入れることで、n次元配列と同じようにn次元ArrayListを作成できます。

ここでは、概念を示す3次元の例を示します。

public static void main(String args[]){
    ArrayList<ArrayList<ArrayList<Integer>>> listOfListOfList = new ArrayList<ArrayList<ArrayList<Integer>>>();
    int firstDimensionSize = 3;
    int secondDimensionSize = 4;
    int thirdDimensionSize = 5;

    for (int i = 0; i < firstDimensionSize; i++) {
        listOfListOfList.add(new ArrayList<ArrayList<Integer>>(vertices));
        for (int j = 0; j < secondDimensionSize; j++) {
            listOfListOfList.get(i).add(new ArrayList<Integer>());
            for(int k = 0; k < thirdDimensionSize; k++) {
                listOfListOfList.get(i).get(j).add(k);
            }
        }
    }
}

新しいArrayList<>の後に<>を空のままにしておくことができることに注意してください。私が信じているjava7以降、Javaは(ネストされているかどうかに関係なく)型を推測します。例をより明確にするために、すべてのレベルでどのタイプを処理しているかを示すために、例にそれらを書き留めました。コードを読みやすくするために、それらを書き留めることもできます。

于 2016-10-11T18:30:43.690 に答える
-2

次のように1行で定義すると、コンパイラは文句を言いません

private ArrayList[] listoflist = (ArrayList<Integer>[]) new Object[10];
于 2013-03-09T19:27:35.103 に答える