java.util.Random

Random是java util包中提供的一个随机数生成器,其中存在一些疑惑,这里记录下:

1.Random提供的2个构造函数有什么区别

    new Random()   生成一个和之前的数字生成器不同的生成器

    new Random(int seed)  根据seed生成一个随机数生成器,如果seed相同,那么这组随机数生成器随机生成的数字也会相同

   先解释下seed的概念:

    seed中文解释是种子,它是指维护next方法的伪随机数的初始值

    说到这里,如何理解这句话,就该区别对待Random的2个构造方法的却别了

   new Random():创建一个新的随机数生成器,该生成器生成一个和在被调用的所有的随机数生成器均不同

public Random() {
        this(seedUniquifier() ^ System.nanoTime());
    }

   从他的构造方法就可以看出来,seedUniquifier生成一个不同的种子,nanoTime生成一个纳秒级的时间,一定程度上保证时间的唯一性,这样生成的随机数生成器在一定程度上是唯一的。

  new Rnaomd(seed):根据上面seed的解释,则他会根据seed生成一个随机数生成器。因为也可以认为,当seed相同时,可以认定这组Random对象是相同的,但肯定不是同一个对象,因为new。那么他产生的随机数是否也相同呢?

public static void main(String[] args) {
        Random random = new Random(47);
        Random random1 = new Random(47);
        System.out.println(random.nextInt() == random1.nextInt());
    }

 返回true,则说明seed相同的Random对象生成的随机数是相同的。

猜你喜欢

转载自fengziciwei.iteye.com/blog/2319423