【发布时间】:2011-02-22 04:35:44
【问题描述】:
假设我有整数数组列表...有没有办法可以生成数组列表中元素的随机排列/排列
所以如果列表是 {1,2,3,4,5,6}
调用一些方法 randomPermute() 会将其更改为随机的类似
{1,3,2,6,5,4}
【问题讨论】:
标签: java data-structures random arraylist permutation
假设我有整数数组列表...有没有办法可以生成数组列表中元素的随机排列/排列
所以如果列表是 {1,2,3,4,5,6}
调用一些方法 randomPermute() 会将其更改为随机的类似
{1,3,2,6,5,4}
【问题讨论】:
标签: java data-structures random arraylist permutation
Collections.shuffle() 完成这项工作:
public static void shuffle(List<?> list) -
使用默认随机源随机排列指定列表。所有排列都以大致相等的可能性发生。
http://download.oracle.com/javase/6/docs/api/java/util/Collections.html#shuffle(java.util.List)
例如
ArrayList<Integer>anArrayList = new ArrayList<Integer>();
anArrayList.add(1);
anArrayList.add(2);
anArrayList.add(3);
anArrayList.add(4);
anArrayList.add(5);
System.out.println(anArrayList);
Collections.shuffle(anArrayList);
System.out.println(anArrayList);
样本输出
[1, 2, 3, 4, 5]
[3, 5, 1, 2, 4]
【讨论】:
您可以使用Knuth shuffle:遍历位置 1 到 n-1,并且对于每个位置,我将当前存在的元素与从位置 i 到 n(包括在内)任意选择的元素交换。
编辑:hooch 的答案更好。 :)
【讨论】:
一个简单的例子:
ArrayList<MyObject> myObjects = new ArrayList<MyObject>();
//code -- load myObjects...
Collections.shuffle(myObjects);
【讨论】: