生成n个不重复的随机数 不包括最大值
/****
* 生成n个不重复的随机数
* @param min
* @param max
* @param n
* @return
*/
public static void randomSet(int min, int max, int n, HashSet<Integer> set) {
if (n > (max - min + 1) || max < min) {
return;
}
for (int i = 0; i < n; i++) {
// 调用Math.random()方法
int num = (int) (Math.random() * (max - min)) + min;
boolean flag=set.add(num);// 将不同的数存入HashSet中
if(flag==false){
randNumSet(flag,set,max,min,num);
}
}
int setSize = set.size();
// 如果存入的数小于指定生成的个数,则调用递归再生成剩余个数的随机数,如此循环,直到达到指定大小
if (setSize < n) {
randomSet(min, max, n - setSize, set);// 递归
}
}
public static void randNumSet(boolean flag,HashSet<Integer> set,int max,int min,int num){
if(flag==false){
num = (int) (Math.random() * (max - min)) + min;
flag=set.add(num);// 将不同的数存入HashSet中
if(flag==false){
randNumSet(flag,set,max,min,num);
}
}
}
jdk1.7后中ThreadLocalRandom类,由于底层的实现机制不同,ThreadLocalRandom的性能是远高于Random,建议后面大家在技术选型的时候优先使用ThreadLocalRandom。
ThreadLocalRandom random=ThreadLocalRandom.current();
System.out.println(random.nextInt(10));
好记性不如烂笔头
浙公网安备 33010602011771号