2011-11-14 14 views
1

Javaで配列をシャッフルしたいが、元のリストを変更するのではなく、一時的なリストだけをシャッフルする。Javaで配列をシャッフル

私はこう書いています。

ArrayList<TristateCheckBox> tempList = buttons; 
Collections.shuffle(tempList); 

しかし、これだけではなく、tempListもボタンリストを変更します。

答えて

8

リストへの参照のコピーだけでなく、リストのコピーを取る必要があります。

List<TristateCheckBox> tempList = new ArrayList<TristateCheckBox>(buttons); 
Collections.shuffle(tempList); 
2

tempListは、buttonsオブジェクトへのポインタです。 tempListとボタンはメモリ内の同じ場所を指します。元のリストの順序を維持するには、データを実際にコピーする必要があります。アレイをコピーする方法については、アレイ:http://download.oracle.com/javase/6/docs/api/java/util/Arrays.htmlを参照してください。

0

あなたは、単に別の変数に同じbuttons ArrayListのインスタンスを割り当てています。 tempListは、同じArrayListを参照することになります。

は、代わりにこれを試してみてください:

List<TristateCheckBox> tempList = new ArrayList<TristateCheckBox>(buttons); 
Collections.shuffle(tempList); 

別のコレクションを服用ArrayListのコンストラクタは、新しいリスト内の指定されたコレクションのすべてのエントリを含むものです。エントリのコピーではなく、別のリスト内の同じ参照のみ。