原文链接: Class -- 03 -- Random类常用方法详解析
这次主要整理下 Java 中 Random 类的常用方法
拥有相同种子的 Random 实例,在相同次数下,生成的伪随机数完全相同
Random random1 = new Random(10); Random random2 = new Random(10); System.out.println(random1.nextInt()); // -1157793070 System.out.println(random2.nextInt()); // -1157793070
random.nextBoolean()
用于从该随机数生成器的序列中得到下一个伪均匀分布的 boolean 值
Random random = new Random(); System.out.println(random.nextBoolean()); // true
random.nextBytes()
生成的随机 byte 数等于 byte 数组的长度
Random random = new Random(); byte[] data = new byte[5]; random.nextBytes(data); System.out.println(Arrays.toString(data)); // [29, 73, -58, -60, -101]
random.nextDouble()
用于从该随机数生成器的序列中得到下一个伪均匀分布在 0.0 到 1.0 之间的 double 值,[0.0, 1.0)
Random random = new Random(); System.out.println(random.nextDouble()); // 0.07169148591770946
random.nextFloat()
用于从该随机数生成器的序列中得到下一个伪均匀分布在 0.0 到 1.0 之间的 float 值,[0.0, 1.0)
Random random = new Random(); System.out.println(random.nextFloat()); // 0.35473615
random.nextInt()
用于从该随机数生成器的序列中得到下一个伪均匀分布的 int 值
Random random = new Random(); System.out.println(random.nextInt()); // 1414623307
random.nextInt(int bound)
用于从该随机数生成器的序列中得到下一个 0 到结束值之间伪均匀分布的 int 值,[0, 结束值)
Random random = new Random(); System.out.println(random.nextInt(10)); // 5
random.nextGaussian()
生成的 double 值符合均值为 0,方差为 1 的正态分布 (高斯分布)
Random random = new Random(); System.out.println(random.nextGaussian()); // 0.48039371890232446
random.setSeed(long seed)
设置随机种子
Random random = new Random(); random.setSeed(10);
random.ints()
用于得到一个有效无限的伪随机 int 值流
Random random = new Random(); IntStream ints = random.ints(); ints.forEach(System.out::println);
random.ints(long streamSize)
用于得到一个有限长度的伪随机 int 值流
Random random = new Random(); IntStream ints = random.ints(5); // -673281150 1081958281 -1955726845 133657651 -773829503 ints.forEach(value -> System.out.print(value + " "));
random.ints(int randomNumberOrigin, int randomNumberBound)
用于得到一个有效无限的范围在起始值到结束值之间的伪随机 int 值流,[起始值, 结束值)
Random random = new Random(); IntStream ints = random.ints(1, 5); ints.forEach(System.out::println);
random.ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
用于得到一个有限长度的范围在起始值到结束值之间的伪随机 int 值流,[起始值, 结束值)
Random random = new Random(); IntStream ints = random.ints(5, 1, 5); ints.forEach(value -> System.out.print(value + " ")); // 4 2 1 4 1
random.longs()
用于得到一个有效无限的伪随机 long 值流
Random random = new Random(); LongStream longs = random.longs(); longs.forEach(System.out::println);
random.longs(long streamSize)
用于得到一个有限长度的伪随机 long 值流
Random random = new Random(); LongStream longs = random.longs(5); // -4253735830085011397 -81131290106869012 8737071083795249766 2189971428068815599 -6480079951366618766 longs.forEach(value -> System.out.print(value + " "));
random.longs(int randomNumberOrigin, int randomNumberBound)
用于得到一个有效无限的范围在起始值到结束值之间的伪随机 long 值流,[起始值, 结束值)
Random random = new Random(); LongStream longs = random.longs(1, 5); longs.forEach(System.out::println);
random.longs(long streamSize, int randomNumberOrigin, int randomNumberBound)
用于得到一个有限长度的范围在起始值到结束值之间的伪随机 long 值流,[起始值, 结束值)
Random random = new Random(); LongStream longs = random.longs(5, 1, 5); longs.forEach(value -> System.out.print(value + " ")); // 1 1 3 1 4
random.doubles()
用于得到一个有效无限的伪随机 double 值流
Random random = new Random(); DoubleStream doubles = random.doubles(); doubles.forEach(System.out::println);
random.doubles(long streamSize)
用于得到一个有限长度的伪随机 double 值流
Random random = new Random(); DoubleStream doubles = random.doubles(5); // 0.8920930039742779 0.17890662178269223 0.4357034705163628 0.923875379269902 0.935716401915742 doubles.forEach(value -> System.out.print(value + " "));
random.doubles(int randomNumberOrigin, int randomNumberBound)
用于得到一个有效无限的范围在起始值到结束值之间的伪随机 double 值流,[起始值, 结束值)
Random random = new Random(); DoubleStream doubles = random.doubles(1, 5); doubles.forEach(System.out::println);
random.doubles(long streamSize, int randomNumberOrigin, int randomNumberBound)
用于得到一个有限长度的范围在起始值到结束值之间的伪随机 double 值流,[起始值, 结束值)
Random random = new Random(); DoubleStream doubles = random.doubles(5, 1, 5); // 1.3129824412519966 3.844270928219007 2.2465511715951845 3.2396684494598116 3.5435450122721313 doubles.forEach(value -> System.out.print(value + " "));