Inplace permutation. This first sorts the array and find all permutaitons with the array. On each iteration it changes the array as well.
import java.util.Arrays;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import org.apache.commons.lang3.ArrayUtils;
public class Permutate {
public static void main(String[] args) {
Permutate permutator = new Permutate();
Set<Integer> data = new HashSet<Integer>();
Random r = new Random();
for (int i = 0 ; i < 5000 ; i ++) {
data.add(r.nextInt(100));
}
int[] array = ArrayUtils.toPrimitive(data.toArray(new Integer[data.size()]));
Arrays.sort(array);
do{
System.out.println(Arrays.toString(array));
} while(permutator.permutate(array) != -1);
}
public int permutate(int[] array) {
int i, j;
for (i = array.length - 2; i >= 0; i--) {
if (array[i] < array[i + 1])
break;
}
if (i < 0) {
return -1;
}
for (j = array.length - 1; j > i; j--) {
if (array[j] > array[i])
break;
}
swap(array, i++, j);
for (j = array.length - 1; j > i; i++, j--) {
swap(array, i, j);
}
return 0;
}
public void swap(int[] array, int x, int y) {
array[x] ^= array[y];
array[y] ^= array[x];
array[x] ^= array[y];
}
}