获取不重复的随机数

获取不重复的随机数
强烈推介IDEA2021.1.3破解激活,IntelliJ IDEA 注册码,2021.1.3IDEA 激活码  

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说获取不重复的随机数,希望能够帮助大家进步!!!

(1)换位排除法

/**
     * @param arr 取数的数组
     * @param noRepeatNumbers  要获取不重复数的个数
     */
    public static int[] getNoRepeatNumByChanget(int[] arr, int noRepeatNumbers) {

        int[] newArr = new int[noRepeatNumbers];
        for (int i = 0; i < noRepeatNumbers; i++) {
            Random random = new Random();
            //角标是从i-arr.length-1的随机数
            //这里0%5=0 1%5=1 2%5=2 .....5%5=0;
            int s = random.nextInt(arr.length - 1) % (arr.length - 1 - i + 1)
                    + i;
            int temp = arr[i];
            //将随机取到的下标的值,与i交换,然后下一次取i++到length的一个随机数
            arr[i] = arr[s];
            arr[s] = temp;
            newArr[i] = arr[i];
        }
        return newArr;
    }

(2)set排异法

/**
     * 
     * @param arr 要遍历的数组
     * @param noRepeatNumbers  获取不重复数的个数
     * @return
     */
    public static Set<Integer> getNoRepeatNumBySet(int[] arr,
            int noRepeatNumbers) {
        Random random = new Random();
        Set<Integer> set = new HashSet<Integer>();
        while (true) {
            int s = random.nextInt(arr.length);
            //将随机的下标的数添加到set集合中
            set.add(Integer.valueOf(arr[s]));
            //如果set中的数长度等于要获取不重复数的个数时,跳出循环
            if (set.size() == noRepeatNumbers) {
                break;
            }
        }
        return set;

    }
本文来源GroovRain,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/25354

发表评论