6

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

可以说我正在尝试对randomizer数组进行洗牌。

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

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

4

2 回答 2

18

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

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

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

原始代码 (with int[]) 编译得很好,但没有按预期工作,因为可变参数方法的行为asList:它只是创建一个单元素列表,int数组作为其唯一成员。

于 2008-10-08T00:52:52.603 回答
0

克里斯的回答是正确的。

正如我在对克里斯的回答的评论中所说的那样,除非数组列表需要增长,否则您的基础数组将适当更改,并且列表会创建一个新数组并将项目复制到其中。

您可能希望保留对列表的引用并在 Arrays.asList 调用之后对其进行迭代,之后不再对数组进行迭代,而是对 List 进行迭代。

于 2008-10-08T01:01:43.567 回答