java中生成不重复随机数(据HashSet特性)
Posted mingliao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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特性)的主要内容,如果未能解决你的问题,请参考以下文章