Collections APIを使用してシャッフルする
-
05-07-2019 - |
質問
コレクションのシャッフルが正常に機能しない理由がわからないため、非常にイライラしています。
randomizer
配列をシャッフルしようとしています。
int[] randomizer = new int[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
何らかの理由で、シャッフルメソッドを呼び出すかどうかにかかわらず、要素はまったく同じようにソートされたままになります。何か案は?
解決
Arrays.asList
は、プリミティブの配列では使用できません。代わりにこれを使用してください:
Integer[] randomizer = new Integer[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
プリミティブ型を使用できないという点で、同じルールがコレクションフレームワークのほとんどのクラスに適用されます。
元のコード( int []
を使用)は正常にコンパイルされましたが、変数メソッド asList
の動作のため、意図したとおりに動作しませんでした。 int
配列を唯一のメンバーとする1要素のリスト。
他のヒント
クリスの答えは正しい。
Chrisの答えのコメントで述べたように、arraylistを大きくする必要がない限り、基礎となる配列は適切に変更され、リストは新しい配列を作成し、そこに項目をコピーします。
リストへの参照を保持し、Arrays.asList呼び出し後、リストを繰り返し処理します。その後、配列を繰り返し処理せず、代わりにリストを繰り返し処理します。
所属していません StackOverflow