我想在java中随机播放一个数组,但不是要更改原始列表,只是将临时列表洗牌。
我写了类似的东西。 ArrayList<TristateCheckBox> tempList = buttons;
Collections.shuffle(tempList);
但是这不是shuffles只有tempList也会改变按钮列表。
答案 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的每个条目。不是条目的副本,只是不同列表中的相同引用。