Java里的Random类有什么用_Java随机数生成规则说明

Random类用于生成非密码学安全的伪随机数,适用于测试、模拟等场景;提供nextInt()、nextDouble()、nextBoolean()等方法生成整数、小数和布尔值,并支持种子设定以保证序列可重现。

Java里的Random类用来生成伪随机数,适用于测试、模拟、游戏逻辑、数据扰动等对“不可预测性”要求不高的场景。它不是密码学安全的,但速度快、使用简单。

生成整数的常见写法

Random提供多种nextInt()用法:

  • nextInt():返回一个完整int范围(-2³¹ 到 2³¹−1)内的任意整数
  • nextInt(n):返回[0, n)之间的整数,n必须为正数,比如nextInt(10)得到0~9
  • 指定区间[m, n]的整数:用random.nextInt(n - m + 1) + m,例如[5, 15]写成nextInt(11) + 5

生成小数和布尔值

浮点类方法默认输出[0.0, 1.0)区间:

  • nextFloat()nextDouble():分别返回float/double类型,范围都是≥0.0且<1.0
  • 要得到[m, n)区间的小数,用r.nextDouble() * (n - m) + m
  • nextBoolean():等概率返回true或false,适合开关逻辑或概率判定

种子(seed)决定可重现性

Random对象初始化时若传入相同long型种子,后续生成的随机序列完全一致:

  • new Random(123)new Random(123) 每次调用nextInt()都会产出相同数字序列
  • 无参构造new Random() 默认用当前系统时间毫秒作种子,所以通常每次运行结果不同
  • 这个特性在单元测试、算法复现、调试中非常有用

其他实用方法

除了基础类型,Random还支持:

  • nextLong():生成任意long范围整数
  • nextGaussian():生成符合标准正态分布(均值0、标准差1)的double值,适合模拟自然现象
  • nextBy

    tes(byte[] b)
    :直接填充字节数组,比逐个生成更高效
  • ints(), longs(), doubles():返回IntStream等流式接口,配合limit()、toArray()等使用更灵活