public class Demo6_ArrayRandom {
private static final Random random = new Random(System.currentTimeMillis());
/**
* 随机产生不重复的[min,max] 范围的count大小的数组
*
* @param count
* @param min
* @param max
* @return
*/
public static int[] notRepeatIndexs(int count, int min, int max) {
if (count == 0)
return ArrayUtils.EMPTY_INT_ARRAY;
int size = max - min + 1;
int[] sources = new int[size];
int j = -1;
for (int i = min; i <= max; i++) {
j++;
sources[j] = i;
}
if (count >= size) {
count = size;
}
int randomRange = size;
for (int i = 0; i < count; i++) {
int randomIndex = random.nextInt(randomRange);
int replaceIndex = size - i - 1;
int randomValue = sources[randomIndex];
int replaceValue = sources[replaceIndex];
sources[randomIndex] = replaceValue;
sources[replaceIndex] = randomValue;
randomRange--;
}
return ArrayUtils.subarray(sources, size - count, size);
}