我变得非常沮丧,因为我似乎无法弄清楚为什么 Collections shuffle 不能正常工作。
可以说我正在尝试对randomizer
数组进行洗牌。
int[] randomizer = new int[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
出于某种原因,无论我是否调用 shuffle 方法,元素都保持完全相同的排序。有任何想法吗?
我变得非常沮丧,因为我似乎无法弄清楚为什么 Collections shuffle 不能正常工作。
可以说我正在尝试对randomizer
数组进行洗牌。
int[] randomizer = new int[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
出于某种原因,无论我是否调用 shuffle 方法,元素都保持完全相同的排序。有任何想法吗?
Arrays.asList
不能与基元数组一起使用。改用这个:
Integer[] randomizer = new Integer[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
相同的规则适用于集合框架中的大多数类,因为您不能使用原始类型。
原始代码 (with int[]
) 编译得很好,但没有按预期工作,因为可变参数方法的行为asList
:它只是创建一个单元素列表,int
数组作为其唯一成员。
克里斯的回答是正确的。
正如我在对克里斯的回答的评论中所说的那样,除非数组列表需要增长,否则您的基础数组将适当更改,并且列表会创建一个新数组并将项目复制到其中。
您可能希望保留对列表的引用并在 Arrays.asList 调用之后对其进行迭代,之后不再对数组进行迭代,而是对 List 进行迭代。