Java Random类详解:如何生成伪随机数流及使用指南

Java Random介绍 一、简介

Java Random类详解:如何生成伪随机数流及使用指南

Random 类处于 java.util 包中。此类的实例可用来生成伪随机数流。之所以称作伪随机,是因为真正的随机数(或随机事件)在某次产生过程中是依据实验过程所表现的分布概率随机产生的,其结果无法预测且不可见。然而,计算机中的随机函数是按照一定算法模拟生成的,其结果是确定的且可见的。我们认为这样产生的数据并非真正意义上的随机数,所以将其称作伪随机。

二、Random类的使用 2.1 生成Random对象

Java API 提供了两个构造方法用于创建 Random 对象。无参构造在底层会调用有参构造,并且将 System.nanoTime()作为参数进行传递。这意味着如果使用无参构造,那么默认的 seed 值就是 System.nanoTime()。

在 JDK1.5 版本之前,默认的种子是 System.currentTimeMillis()。下面简单说明一下 System.nanoTime()与 System.currentTimeMillis()的区别。System.currentTimeMillis()会产生一个当前的毫秒值,此毫秒值是从 1970 年 1 月 1 日 0 时开始到当前时刻所经过的毫秒数。System.nanoTime()是从某个起始时间到当前的时间差,这个起始时间在同一个虚拟机上是固定的,且精确到纳秒。这个起始时间可能是未来,如果起始时间是未来,得到的时间差就是负数。它主要用于衡量一个时间段,例如一段代码执行所花费的时间。

Random random = new Random()
创建一个名为 random 的 Random 对象,通过传入一个长整型的 seed 作为参数来初始化这个对象,即 new Random(long seed) 这样的操作创建了一个随机数生成器。

对于有参构造,要注意的是,若 seed 值相同,无论执行多少次,随机生成的数据都是相同的。具体如下例:

package dailytest;
 
import java.util.Random;
 
import org.junit.Test;
 
/**
 * Random类学习
 * @author yrr
 *
 */
public classRandomTest 进行如下操作:使用有参数构造来生成 Random 对象;无论执行多少次,每次所得到的结果都是相同的;具体的结果为 -1157793070、1913984760、1107254586。 @Test public void创建了一个 Random 对象,该对象的种子被设置为 10 。); for (int i = 0; i < 3; i++在这段代码中,通过调用 random.nextInt 方法来生成并输出随机数。 

2.2 Random类中的方法

简单方法如下所示

/**
     * 测试Random类中的简单方法
     */
    @Test
    public void test02() {
使用 for 循环遍历数组:for (int i = 0; i< byteArr.length; i++) { System.out.println(byteArr[i]); } /** * random.nextInt(n) * 随机生成一个正整数,整数范围[0,n) * 如果想生成其他范围的数据,可以在此基础上进行加减 * * 例如: * 1. 想生成范围在[0,n]的整数 * random.nextInt(n+1) * 2. 想生成范围在[m,n]的整数, n >要生成范围在(m,n)的整数,通过 random.nextInt(n - m + 1) + m ,同时还有 random.nextInt() % (n - m) + m 等操作。主要依靠简单的加减法。System.out.println("nextInt(10):" + random.nextInt(10)); //随机生成一个整数,整数范围[0,10) 。for (int i = 0; i< 20; i++) { //[3,15) //这里有坑,需要注意,如果前面用了+号,应该要把计算结果整体用括号括起来, //不然它会把+号解释为字符串拼接 System.out.println("我生成了一个[3,15)区间的数,它是:" + (random.nextInt(12) + 3)); } }

JDK1.8新增方法:

package dailytest;
 
import java.util.Random;
 
System.out.println(arr 的长度); 对于 (int i 等于 0; i 小于 arr 的长度; i 递增)< arr.length; i++) { System.out.println(arr[i]); } //生成5个在[10,100)范围内的整数 random.ints(5, 10, 100).forEach(System.out :: println); //这句话和下面三句话功能相同 //forEach等价于: arr = random.ints(5, 10, 100).toArray(); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } /** * 对于 * random.ints(); * random.ints(ori, des); * 两个生成无限个随机数的方法,我们可以利用Stream里的terminal操作,来截断无限这个操作 */ //limit表示限制只要10个,等价于random.ints(10) random.ints().limit(10).forEach(System.out :: println); //等价于random.ints(5, 10, 100) random.ints(10, 100).limit(5).forEach(System.out :: println); } }

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

25阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

27阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

23阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

25阅读