java中的permute / scramble arraylist元素

时间:2011-02-22 04:35:45

标签: java data-structures random arraylist permutation

假设我有整数的arraylist ...有没有办法可以在arraylist中生成元素的随机排列/排列

所以如果列表是{1,2,3,4,5,6}

调用某个方法randomPermute()会将其更改为随机的内容,如

{1,3,2,6,5,4}

3 个答案:

答案 0 :(得分:14)

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]

答案 1 :(得分:0)

你可以使用Knuth shuffle:遍历位置1到n-1,并且对于每个位置,我将当前存在的元素与从i到n位置的任意选择的元素交换。

编辑:hooch的答案更好。 :)

答案 2 :(得分:0)

一个简单的例子:

ArrayList<MyObject> myObjects = new ArrayList<MyObject>();
//code -- load myObjects...

Collections.shuffle(myObjects);