开发者

permute/scramble arraylist elements in java

开发者 https://www.devze.com 2023-02-12 06:17 出处:网络
suppose I have arraylist of integers...is there a way that I can generate a random permutation/arrangement of the e开发者_C百科lements in the arraylist

suppose I have arraylist of integers...is there a way that I can generate a random permutation/arrangement of the e开发者_C百科lements in the arraylist

so if the list is {1,2,3,4,5,6}

calling some method randomPermute() would change it to something random like

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


Collections.shuffle() does the job:

public static void shuffle(List<?> list) - Randomly permutes the specified list using a default source of randomness. All permutations occur with approximately equal likelihood. http://download.oracle.com/javase/6/docs/api/java/util/Collections.html#shuffle(java.util.List)

For example

    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);

Sample Output

[1, 2, 3, 4, 5]
[3, 5, 1, 2, 4]


You can use the Knuth shuffle: go through the positions 1 through n−1, and for each position i swap the element currently there with an arbitrarily chosen element from positions i through n, inclusive.

Edit: The answer by hooch is better. :)


A simple example:

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

Collections.shuffle(myObjects);
0

精彩评论

暂无评论...
验证码 换一张
取 消