1

リストとキューを実際に使用したのはこれが初めてなので、これは非常に単純な間違いかもしれません。私のキューが整数にキャストできないオブジェクトでいっぱいだからですか?

           //populate array
        for(int i=0; i<11; i++){
            numberarray[i] = i; 
        }
        // populate list with numbers from array
        List numList = Arrays.asList(numberarray);
        Collections.shuffle(numList);

        Queue queue = new LinkedList();
        queue.addAll(numList);

        int num1 = (Integer) queue.poll();
        assignPictures(button01, num1);
4

2 に答える 2

9

私の推測では、問題は次のとおりです。

Arrays.asList(numberarray);

numberarrayint[]ではなく である場合Integer[]、その呼び出しは実際には、その配列を 1 つの要素として含む の をList返します。int[]

オブジェクトをにキャストしようとすると、ClassCastException後で発生します。int[]Integer

Java はプリミティブ コレクションをサポートしていないためArrays.asList、プリミティブ配列を簡単にラップする方法はありません。. _ Integer[]_Collection

asList(T...)混乱の一部は、メソッドがvarargsを取るという事実から来ています。代わりに a だけを引数として受け取った場合、プリミティブ配列は を拡張しないためT[]、コンパイラは a を渡すことを許可しません。しかし、varargs のサポートにより、コンパイラは、単一の要素によって裏打ちされたを構築するつもりであると推測し、考えます。int[]Object[]Tint[]Listint[][]

他の人が指摘しているように、ジェネリックを使用すると、このようなあいまいさを解決するのに本当に役立ちます。ジェネリックを使用してプログラムすることは常に良い考えです。

List<Integer> numList = Arrays.asList(numberarray);

この行は、実行時にコードが失敗するのではなく、次のコンパイル エラーを返します。

incompatible types
required: java.util.List<java.lang.Integer>
found: java.util.List<int[]>

補足:を使用するようになったと仮定すると、Integer[]要素が になる可能性があることを忘れないでくださいnull。この場合、アンボックス化NullPointerExceptionするときに a がスローされます。ただしint、実装で要素が許可されていないことをnull確認するか、nullアンボックス化する前に確認してください。

于 2012-05-20T18:54:26.930 に答える
1

本当にパフォーマンスが重要で、int のようなアトミック型を多く使用しない限り、Generics と ArrayList/ArrayDeque を使用する必要があります。次に、 http://labs.carrotsearch.com/hppc.htmlをご覧ください。

于 2012-05-20T18:57:44.310 に答える