在Java中随机播放一个数组

时间:2011-11-14 17:38:36

标签: java arraylist shuffle

我想在java中随机播放一个数组,但不是要更改原始列表,只是将临时列表洗牌。

我写了类似的东西。

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

但是这不是shuffles只有tempList也会改变按钮列表。

3 个答案:

答案 0 :(得分:8)

您需要获取List的副本,而不仅仅是列表引用的副本。

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

答案 1 :(得分:2)

tempList是指向按钮对象的指针。 tempList和按钮指向内存中的相同位置。您必须实际复制数据以维护原始列表中的顺序。查看Arrays:http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html以获取复制数组的方法。

答案 2 :(得分:0)

您只是将相同的buttons ArrayList实例分配给另一个变量。 tempList最终将引用相同的ArrayList。

请改为尝试:

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

采用另一个Collection的ArrayList构造函数将包含新列表中给定Collection的每个条目。不是条目的副本,只是不同列表中的相同引用。