Java随机生成长度为length,总数为number的不重复随机数

import java.util.*;

/**
 * author: GoL
 * time:   2018-06-12
 */
public class randomGenerateUtils {
    private static final String[] number = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
    private static final String[] lower = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"};
    private static final String[] upper = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};

    public static void test(String[] args) {
        Date start = new Date();
        random(50000, 5);    //长度为5的50000个不重复随机数
        Date end = new Date();
        System.out.println("耗时:" + (end.getTime() - start.getTime())/1000 + "秒");
    }

    public static List<String> random (int number, int length) {
        if ((int)Math.pow(length, 64) < number) {
            System.out.println("长度为" + length + "的随机数总数小于需求总数" + number);
            return Collections.EMPTY_LIST;
        }
        Set<String> set = new HashSet<>(number);
        Random r = new Random();
        while (set.size() < number) {
            String string = randomGenerate(r, length);
            if (!set.add(string)) {
                System.out.println("当前随机数【" + string + "】已存在!");
            } else {
                System.out.println("当前个数:" + set.size());
            }
        }
        return new ArrayList<>(set);
    }

    private static String randomGenerate(Random r, int length) {
        StringBuilder builder = new StringBuilder(length);
        for (int i = 0, len = length; i < len; i++) {
            int idx = r.nextInt(3);
            String[] chars = randomChars(idx);
            builder.append(randomChar(chars, r));
        }
        return builder.toString();
    }

    private static String[] randomChars(int idx) {
        if (idx == 0) {
            return lower;
        }
        if (idx == 1) {
            return upper;
        }
        return number;
    }

    private static String randomChar(String[] chars, Random r) {
        return chars[r.nextInt(chars.length - 1)];
    }
}

这里只是提供一种思路

如果帮到你,请点个赞吧 O(∩_∩)O~

猜你喜欢

转载自blog.csdn.net/qq171563857/article/details/81217102