Java案例实现不重复的随机数

 更新时间:2022年04月01日 11:11:06   作者:再美不及姑娘你  
这篇文章主要介绍了Java案例实现不重复的随机数,通过创建Set集合对象,可以使用HashSet也可以使用TreeSet,区别在于TreeSet是排序后的,创建随机数对象,获取一个随机数去重等操作,需要的朋友可以参考一下

需求:获得十个1-20的随机数,要求随机数不能重复,存储到集合中并遍历

分析:

  • 1.创建Set集合对象,可以使用HashSet也可以使用TreeSet,区别在于TreeSet是排序后的
  • 2.创建随机数对象,获取一个随机数
  • 3.判断集合长度是否大于10,是停止生成、存储并遍历
  • 否:继续生成直到长度大于10停止生成、存储并遍历
  • 4.输出

代码:

public class SetDemo {
    public static void main(String[] args) {
        //创建Set集合对像
        Set<Integer> s=new TreeSet<Integer>();
        //创建随机数对象
        Random r=new Random();
        while(s.size()<10){
            int num= r.nextInt(20)+1;
            s.add(num);
        }
        for (Integer i:s){
            System.out.println(i);
        }
    }
}
​

补充:

通过单个数组简易实现不重复随机数生成,先上源码。

/**
* 获取随机数组
* @param 源数组
 * @param size 目标数组大小
 * @return 随机数组
 */
public static int[] getRandomRes(int[] source,int size){
    if (source == null && size > source.length) {
        return;
    }
    int[] result = new int[size];
    Random random = new Random();
    for (int i = 0; i < size; i++) {
        int randomIndex = random.nextInt(source.length - 1 - i);
        int randomRes = source[randomIndex];
        result[i] = randomRes;
        int temp = source[randomIndex];
        source[randomIndex] = source[source.length - 1 - i];
        source[source.length - 1 - i] = temp;
    }
    return result;
}

下面看图解,数字为数组的index。

黑色数字表示能随机到的数,红色代表不能随机到数。
因此只能随机到index:0~4的数,假设是2,然后将2与index5互换位置。

此时结果result[] = {2}

继续循环

从前index:0~3中循环,假设取出index0,与index4互换,此时结果为result = {2,0},依次类推。

优点:简单快捷
缺点:每次无法取到最后一个数。

不断随机,使用Set去重

/**
*生成随机数组
*@param size 目标数组大小
*@param max 目标数最大值
*/
public Set<Integer> getRandomSet(int size,int max){
    Random random= new Random();
    Set<Integer> result= new LinkedHashSet<Integer>();
    while (generated.size() < size)
    {
        Integer next = rng.nextInt(max) + 1;
        generated.add(next);
    }
}

此处使用LinkedHashSet保证插入顺序与结果相同。

到此这篇关于Java案例实现不重复的随机数的文章就介绍到这了,更多相关Java不重复随机数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Junit测试找不到SpringJUnit4ClassRunner.class的解决

    Spring Junit测试找不到SpringJUnit4ClassRunner.class的解决

    这篇文章主要介绍了Spring Junit测试找不到SpringJUnit4ClassRunner.class的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Java实现同步枚举类数据到数据库

    Java实现同步枚举类数据到数据库

    这篇文章主要为大家详细介绍了Java实现同步枚举类数据到数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • JAVA如何获取jvm和操作系统相关信息

    JAVA如何获取jvm和操作系统相关信息

    这篇文章主要介绍了JAVA获取jvm和操作系统相关信息,使用Java自带的类进行获取系统运行的相关信息,在这整理记录分享一下,需要的朋友可以参考下
    2022-10-10
  • kafka消费者kafka-console-consumer接收不到数据的解决

    kafka消费者kafka-console-consumer接收不到数据的解决

    这篇文章主要介绍了kafka消费者kafka-console-consumer接收不到数据的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 新手初学Java List 接口

    新手初学Java List 接口

    这篇文章主要介绍了Java集合操作之List接口及其实现方法,详细分析了Java集合操作中List接口原理、功能、用法及操作注意事项,需要的朋友可以参考下
    2021-07-07
  • MyBatis+MySQL 返回插入的主键ID的方法

    MyBatis+MySQL 返回插入的主键ID的方法

    本篇文章主要介绍了MyBatis+MySQL 返回插入的主键ID的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-04-04
  • 使用Java和SNMP4J实现SNMP操作完整代码

    使用Java和SNMP4J实现SNMP操作完整代码

    这篇文章主要介绍了如何使用Java和SNMP4J库进行SNMP操作,包括初始化SNMP、创建目标、创建PDU、发送SNMP请求和处理响应等内容,通过编写SnmpUtil类,展示了完整的SNMP操作流程,需要的朋友可以参考下
    2024-12-12
  • Java 实战交易平台项目之宠物在线商城系统

    Java 实战交易平台项目之宠物在线商城系统

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Java实现一个宠物在线商城系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • 解决idea2020.1 用gitee push推送被拒绝的原因(亲测有效)

    解决idea2020.1 用gitee push推送被拒绝的原因(亲测有效)

    这篇文章主要介绍了解决idea2020.1 用gitee push推送被拒绝的原因(亲测有效),本文给大家分享解决方案,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • java中符号@的作用及用法举例详解

    java中符号@的作用及用法举例详解

    在Java编程语言中,@符号被称为注解(Annotation),下面这篇文章主要介绍了java中符号@的作用及用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04

最新评论