How to generate a random permutation in Java?

后端 未结 3 1194
小鲜肉
小鲜肉 2020-11-30 08:59

What is the best way to generate a random permutation of n numbers?

For example, say I have a set of numbers 1, 2 and 3 (n = 3)

Set of all possible permutati

相关标签:
3条回答
  • 2020-11-30 09:05

    You can try RubyCollect4J

    Ruby.Array.of(1, 2, 3).permutation().toA().sample();
    

    It did exactly what you asked for. BTW, I am the author of this Java library.

    0 讨论(0)
  • 2020-11-30 09:24
    java.util.Collections.shuffle(List);
    

    javadoc link for Collections.shuffle

    List<Integer> list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(3);
    java.util.Collections.shuffle(list);
    

    It's worth noting that there are lots of algorithms you can use. Here is how it is implemented in the Sun JDK:

    public static void shuffle(List<?> list, Random rnd) {
        int size = list.size();
        if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {
            for (int i=size; i>1; i--)
                swap(list, i-1, rnd.nextInt(i));
        } else {
            Object arr[] = list.toArray();
    
            // Shuffle array
            for (int i=size; i>1; i--)
                swap(arr, i-1, rnd.nextInt(i));
    
            // Dump array back into list
            ListIterator it = list.listIterator();
            for (int i=0; i<arr.length; i++) {
                it.next();
                it.set(arr[i]);
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-30 09:24

    Do you ask about a permutation generator? Because your permutation set is missing two numbers. Anyway you may look at the permutations generator on http://www.merriampark.com/perm.htm

    0 讨论(0)
提交回复
热议问题