当前位置:   article > 正文

常用类-java.util.Random

java.util.random

常用类-java.util.Random

  • public class Random
    extends Object
    implements Serializable
    
    • 1
    • 2
    • 3
  • 该类的实例用于生成伪随机数的流。 该类使用48位种子,其使用线性同余公式进行修改。

  • 如果使用相同的种子创建两个Random Random ,并且对每个实例进行相同的方法调用序列,则它们将生成并返回相同的数字序列。

  • java.util.Random的java.util.Random是线程安全的。 但是,跨线程的同时使用java.util.Random实例可能会遇到争用,从而导致性能下降。 在多线程设计中考虑使用ThreadLocalRandom

  • java.util.Random的java.util.Random不是加密安全的。 考虑使用SecureRandom获取一个加密安全的伪随机数生成器,供安全敏感应用程序使用。

构造方法:

    • Constructor and Description
      Random() 创建一个新的随机数生成器。
      Random(long seed) 使用单个 long种子创建一个新的随机数生成器。

实验:设置随机数种子的作用

@Test
public void test002() {
    long seed = 123;
    Random random = new Random(seed);
    int i1 = random.nextInt();//随机产生一个int类型的值
    int i2 = random.nextInt();
    int i3 = random.nextInt();
    System.out.println(i1);
    System.out.println(i2);
    System.out.println(i3);
    System.out.println("==============================");
    Random random1 = new Random();
    random1.setSeed(seed);
    int j1 = random.nextInt();
    int j2 = random.nextInt();
    int j3 = random.nextInt();
    System.out.println(j1);
    System.out.println(j2);
    System.out.println(j3);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
第一次运行结果:
-1188957731
1018954901
-39088943
==============================
1295249578
1087885590
-1829099982

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
第二次运行结果:
-1188957731
1018954901
-39088943
==============================
1295249578
1087885590
-1829099982

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

结果:给Random对象设置了随机数种子可以使得这个对象多次运行时产生的随机数固定,但是同一对象一次运行中多次调用方法还是随机的。

常用方法:

    • booleannextBoolean() 返回下一个伪随机数,从这个随机数发生器的序列中均匀分布 boolean值。
      voidnextBytes(byte[] bytes) 生成随机字节并将它们放入用户提供的字节数组中。
      doublenextDouble() 返回下一个伪随机数,从这个随机数发生器的序列中 0.01.0之间的 double0.0分布。
      floatnextFloat() 返回下一个伪随机数,从这个随机数发生器的序列中 0.01.0之间的 float0.0分布。
      doublenextGaussian() 从该随机数发生器的序列返回下一个伪随机数,高斯(“正”)分布 double值,平均值为 0.0 ,标准差为 1.0
      intnextInt() 返回下一个伪随机数,从这个随机数发生器的序列中均匀分布 int值。
      intnextInt(int bound) 返回伪随机的,均匀分布 int值介于0(含)和指定值(不包括),从该随机数生成器的序列绘制。
      longnextLong() 返回下一个伪,均匀分布 long从这个随机数生成器的序列值。
      voidsetSeed(long seed) 使用单个 long种子设置该随机数生成器的种子。

扩展:Random产生的随机数都是等概率的

验证:

@Test
public void test003() {
    Random random = new Random();
    int[] arr = new int[5];//每个元素的值代表出现随机数为下标的次数
    //例如:1出现的次数为100次,那么a[1] = 100
    int ran = 0;
    for (int i = 0; i < 1000000; i++) {
        ran = random.nextInt(5);//随机产生0-4的整数
        arr[ran]+=1;
    }
    for (int i = 0; i < 5; i++) {
        System.out.println(i + "出现的概率:" + (double)arr[i]/1000000);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/84131?site
推荐阅读
相关标签
  

闽ICP备14008679号