/**** * 生成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));
标签:set,min,重复,max,最大值,int,flag,num,随机数 From: https://www.cnblogs.com/codehello/p/6561104.html