美文网首页っ碎片化代码
Java常用类库-Random类

Java常用类库-Random类

作者: 白晓明 | 来源:发表于2019-04-09 15:13 被阅读5次

Random的实例用于生成伪随机数。其在 java.util 包下,前几节的类都在 java.lang 包下,因此我们在创建 Random 对象时需要在类名上面导入包名( import java.util.Random )。
Random使用线性同余公式修正的48位种子。只有使用相同种子创建、并且执行相同的方法调用序列的两个随机实例,才能生成并返回相同的数字序列。
*** Random* 类** 实现的算法使用一个受保护的使用方法,每次调用可以提供多达32位伪随机生成数。
注: java.util.Random 的实例在密码学上不安全。对于敏感的应用程序,应该考虑使用 SecureRandom 类来获取加密安全的随机数生成器。

1. 构造函数

/*
* Random() 无参构造器
*/
Random random = new Random();
/*
* Random(long seed) 带长整型参数的构造器
*/
long seed = 45687;
Random randomBySeed = new Random(seed);

2. 方法概述

  • 设置随机数种子值
/*
* 使用长整型(long)种子设置此随机数的种子值。
* 其将种子值更新为(种子^0x5DEECE66DL) & ((1L << 48) - 1)
*       并清除nextGaussian()使用的haveNextNextGaussian标志。
*/
Random r = new Random();
r.setSeed(89999);
System.out.println(r.nextInt());
  • 生成下一个伪随机数
/*
* 生成[0,10]区间的整数。
*     由于next(int bits)是 protected (相对其他类是私有类,相对子类或姐妹类是公共的),因此其他类需要根据数据类型调用相关方法。
*      nextBytes(byte[] bytes)
*      nextInt() & nextInt(int bound)
*      nextLong()
*      nextBoolean()
*      nextFloat()
*      nextDouble()
*/
Random random = new Random();
System.out.println(random.nextInt(10));

3. 与Math类中的random()方法的区别

  • Math.Random() 返回带正号的double值,其值大于0.0,小于1.0。Math.Random() 是同步的,允许多个线程同时使用。
  • java.util.Random 类生成随机数时,首先创建该类的实例对象。如果调用无参构造器,Java编辑器以系统当前时间作为随机数的种子值,因为每时每刻的时间不相同,所以产生的随机数也不同。但不排除运行速度过快,导致两次随机数相同的几率。也可以在实例化时自定义种子值,如果种子值相同,则随机数也完全相同。

相关文章

  • Java常用类库-Random类

    Random 类的实例用于生成伪随机数。其在 java.util 包下,前几节的类都在 java.lang 包下,...

  • java 常用类使用

    常用类使用 java.util.Random java.util.Scanner

  • Java 常用类 09. Java Random 类

    简介:生成随机数 构造方法:Random(); 创建一个新的随机数生成器。Random(long seed); 使...

  • collections相关的数据结构及API

    1、列举几个Java Collection类库中的常用类 此处应该有Collection类图。 Collectio...

  • Java常用类库-Calendar类

    Calendar 类 是一个为提供在特定时间点和一组日历字段(如年、月、日、时、分、秒等)之间转换,以及操作日历字...

  • Java常用类库-Date类

    Date 类 在 java.util 包中,因此在使用 Date 类时需要导入该包。Date 类 表示特定的时间瞬...

  • Java常用类库-SimpleDateFormat类

    SimpleDateFormat 类 是DateFormat 类 的子类,其实一个具体的类,用于格式化和解析日期。...

  • Java常用类库-DateFormat类

    DateFormat 类 是一个用于格式化日期/时间子类的抽象类,其在 java.text 包中。日期/时间格式化...

  • Java常用类库-Math类

    Math类包含一系列执行数值运算的方法,如初等指数、对数、平方根和三角函数等。与StricMath类的一些数值方法...

  • java常用类库

    commons-lang(常用工具集合包) commons-io(io操作类库) guava jsch(远程执行命...

网友评论

    本文标题:Java常用类库-Random类

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