美文网首页
Random 种子的作用

Random 种子的作用

作者: 一团捞面 | 来源:发表于2018-09-14 14:32 被阅读22次

    1. 简介

    Random 有两个构造方法:

    public Random()
    public Random(long seed)
    

    其实第一个无参构造方法会默认以当前时间作为种子。那么什么是种子呢?

    先来看看 Random 的 next() 方法:

    protected int next(int bits) {
        long oldseed, nextseed;
        AtomicLong seed = this.seed;
        do {
            oldseed = seed.get();
            nextseed = (oldseed * multiplier + addend) & mask;
        } while (!seed.compareAndSet(oldseed, nextseed));
        return (int)(nextseed >>> (48 - bits));
    }
    

    seed 就是种子,它的作用就是用于生成一个随机数。

    2. 两个构造方法有什么不同?

    现在看一个例子,对比这两个构造方法有什么不同。

    public class RandomDemo {
    
        public static void main(String[] args) {
            for(int i = 0; i < 5; i++) {
                Random random = new Random();
                for(int j = 0; j < 5; j++) {
                    System.out.print(" " + random.nextInt(10) + ", ");
                }
                System.out.println("");
            }
        }
        
    }
    

    以上使用了 Random 无参的构造方法,运行结果如下:

    2 0 3 2 5 
    6 4 1 9 7 
    9 1 8 3 6 
    2 5 3 5 6 
    9 9 9 4 5 
    

    可以看出每次的结果都不一样。下面使用 Random 的有参构造方法:

    public class RandomDemo {
    
        public static void main(String[] args) {
            for(int i = 0; i < 5; i++) {
                Random random = new Random(47);
                for(int j = 0; j < 5; j++) {
                    System.out.print( + random.nextInt(10) + " ");
                }
                System.out.println("");
            }
        }
        
    }
    

    打印结果如下:

    8 5 3 1 1 
    8 5 3 1 1 
    8 5 3 1 1 
    8 5 3 1 1 
    8 5 3 1 1 
    

    这是因为无参的构造方法是以当前时间作为种子,每次的种子都不一样,随机性更强。而有参的构造方法是以固定值作为种子,每次输出的值都是一样的。

    相关文章

      网友评论

          本文标题:Random 种子的作用

          本文链接:https://www.haomeiwen.com/subject/yejogftx.html