Java中Random的使用

做数据集实验时需要产生一些随机数据,所以 总结整理一下Random的使用

一、Random类构成

  • java.util包下的一个类
  • class Random implements java.io.Serializable
  • 常用的两个构造方法
    • public Random(){...}
    • public Random(long seed){...}
  • 常用的方法
    • nextInt() next(int bis) nextInt(int bound)等。。。

二、不同构造函数的区别

  • 空参构造方法

    public Random() {
        this(seedUniquifier() ^ System.nanoTime());
    }
    //System.nanoTime()返回最准确的可用系统计时器的当前值,以纳秒为单位
    //currentTimeMillis()当前时间与世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)
    

    使用当前系统计数器的值作为seed构造对象

  • 带参构造方法

    public Random(long seed) {
        if (getClass() == Random.class)
            this.seed = new AtomicLong(initialScramble(seed));
        else {
            // subclass might have overriden setSeed
            this.seed = new AtomicLong();
            setSeed(seed);
        }
    }
    

    自定一个数字作为seed,只是随机算法的起源数字,和生成的随机数字的区间无关

    • 几种可能的情况和结果
      • 随机种子一定,随机数范围一定,则单个对象不管运行多少次结果一定,但是空参构造器就不一定

        		for (int i = 0; i < 10; i++) {  
                    Random rand1 = new Random(100);
                    int j = rand1.nextInt(1000);  
                    System.out.println(j);              
                }  
                //结果都是相同的
        
      • 随机种子一定,随机数范围一定,则多个对象多次运行的结果也是相同的

        for (int i = 0; i < 10; i++) {  
                    Random rand1 = new Random(100);
                    Random rand2 = new Random(100);
                    int j = rand1.nextInt(1000);  
                    int k = rand2.nextInt(1000);  
                    System.out.println(j);      
                    System.out.println(k);  
                }  
                //j和k每次都是相同的,也就是说seed相同得到的结果
        
      • 随机种子一定,随机数范围一定,但对象连续调用,运行结果不同,但是多次调用每个是一样的

        for (int i = 0; i < 10; i++) {  
                    Random rand1 = new Random(100);
                    int j = rand1.nextInt(1000);  
                    int k = rand1.nextInt(1000);  
                    System.out.println(j);      
                    System.out.println(k);  
                }  
            //输出
        	915
        	250
        	915
        	250
        	915
        	250
        
  • 总结

    • 无参构造器得到的对象不论是不是同一个,区间bound是多少,结果都是在区间内的不同数
    • 带参的构造器只要seed相同,得到的对象固定bound得到的随机数就是固定的,但是连续调用结果是不一样的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值