首页 > 代码库 > java中生成不重复随机数(据HashSet特性)

java中生成不重复随机数(据HashSet特性)

import java.util.HashSet;
public class RandomNumbers {


     /**
         * 随机指定范围内N个不重复的数 利用HashSet的特征,只能存放不同的值
         * 
         * @param min
         *            指定范围最小值
         * @param max
         *            指定范围最大值
         * @param n
         *            随机数个数
         * @param HashSet<Integer>
         *            set 随机数结果集
         */
        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;
                set.add(num);// 将不同的数存入HashSet中
            }
            int setSize = set.size();
            // 如果存入的数小于指定生成的个数,则调用递归再生成剩余个数的随机数,如此循环,直到达到指定大小
            if (setSize < n) {
                /**
                 * 下面这一行为什么被注释掉了,说实话万能的度娘到处都是这段代码
                 * 但是如果那样的话并不一定能确定生成对应的数值
                 * 大佬们还是先仔细看一下,n-setSize只是剩下没有生成的数量,如果下次还没生成不同的数值那还怎么玩
                 */
                randomSet(min, max, n - setSize, set);// 递归  
//                randomSet(min, max, n, set);// 递归
            }
        }
        
        public static void main(String[] args) {
            /**
             * 那就这样吧,根据你的需求去生成最合适的数值
             * 示例默认生成4位的随机数,从0到999当然不算了,所以就是8999位喽
             * 不过生成数量可别超过你给的范围,jvm会炸的
             */
            int max = 5;//随机数范围的最大值
            int min = 1;//随机数范围的最小值
            int n = 4;//生成数量
            HashSet<Integer> numbers = new HashSet<Integer>();
            randomSet(min,max,n,numbers);
            System.out.println(numbers);//随意打印一下看看效果
        }

    }

 

java中生成不重复随机数(据HashSet特性)