使用Collections API来随机播放

时间:2008-10-08 00:45:15

标签: java collections shuffle

我变得非常沮丧,因为我似乎无法弄清楚为什么Collections shuffling无法正常工作。

让我们说我试图改组randomizer数组。

int[] randomizer = new int[] {200,300,212,111,6,2332}; 
Collections.shuffle(Arrays.asList(randomizer));

由于某种原因,无论我是否调用shuffle方法,元素都保持完全相同的排序。有任何想法吗?

2 个答案:

答案 0 :(得分:18)

Arrays.asList不能与基元数组一起使用。请改用:

Integer[] randomizer = new Integer[] {200,300,212,111,6,2332}; 
Collections.shuffle(Arrays.asList(randomizer));

同样的规则适用于集合框架中的大多数类,因为您不能使用原始类型。

原始代码(int[])编译正常,但由于可变方法asList的行为而没有按预期工作:它只是创建一个单元素列表,{ {1}}数组作为其唯一成员。

答案 1 :(得分:0)

克里斯的回答是正确的。

正如我在对Chris回答的评论中所说的那样,除非arraylist需要增长,否则你的底层数组会发生适当的变化,并且列表会创建一个新的并将项目复制到其中。

您可能希望保留对列表的引用并在Arrays.asList调用之后迭代它,而不是在此之后遍历数组,而是遍历List迭代。