知识库 知识库
首页
  • Hyperskill - Java

    • Java basic
    • Java OOP
    • 应知
    • 扩展
    • IO & Stream
    • Error & Exception
    • Algorithm & Data structure
    • Design pattern
    • Web
    • Spring boot
  • 练习题

    • 选择题 & 填空题
    • 代码题
  • Frank - Java与生活 (OOP)

    • 参考资料
    • Java基础
    • OOP上半部分
    • OOP下半部分
  • Frank - Java API进阶

    • Base API
    • Unit Test and main function
  • 学习笔记
  • 学习笔记

    • 数据库
  • Frank - MySQL删库跑路

    • 安装、连接、配置
    • 基本操作——数据库
    • 基本操作——表
    • 基本操作——数据
    • 数据类型
    • 列属性完整性
    • 数据库设计思维
    • 单表查询
    • 多表查询
  • 学习笔记

    • 其它
  • Frank - Linux现代方法

    • 必知
    • 命令
    • 技巧
  • 技术文档
  • Git
  • GitHub技巧
  • 前端
  • Khan Academy - 语法
  • Monthly
  • 阅读
  • Others
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 标签
  • 归档
GitHub (opens new window)

Jim FuckPPT

Java小学生
首页
  • Hyperskill - Java

    • Java basic
    • Java OOP
    • 应知
    • 扩展
    • IO & Stream
    • Error & Exception
    • Algorithm & Data structure
    • Design pattern
    • Web
    • Spring boot
  • 练习题

    • 选择题 & 填空题
    • 代码题
  • Frank - Java与生活 (OOP)

    • 参考资料
    • Java基础
    • OOP上半部分
    • OOP下半部分
  • Frank - Java API进阶

    • Base API
    • Unit Test and main function
  • 学习笔记
  • 学习笔记

    • 数据库
  • Frank - MySQL删库跑路

    • 安装、连接、配置
    • 基本操作——数据库
    • 基本操作——表
    • 基本操作——数据
    • 数据类型
    • 列属性完整性
    • 数据库设计思维
    • 单表查询
    • 多表查询
  • 学习笔记

    • 其它
  • Frank - Linux现代方法

    • 必知
    • 命令
    • 技巧
  • 技术文档
  • Git
  • GitHub技巧
  • 前端
  • Khan Academy - 语法
  • Monthly
  • 阅读
  • Others
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 标签
  • 归档
GitHub (opens new window)
  • Hyperskill - Java

  • 练习题

  • Frank - Java与生活

  • Frank - Java API进阶

    • Base API

      • Java API定义和用处
      • Number & Math
      • Random
        • 种子(seed)?
        • 不便之处(Random类无可指定范围的方法)
          • Math.random()乘法方式
          • ThreadLocalRandom 方式
      • Date & Calendar
      • System
    • Unit Test and Main function

    • Throwable

  • 学习笔记

  • Java
  • Frank - Java API进阶
  • Base API
Jim
2022-09-25
目录

Random

java.lang.Object
	java.util.Random
		java.security.SecureRandom
		java.util.concurrent.ThreadLocalRandom
1
2
3
4

java.util.Random

An instance of this class is used to generate a stream of pseudorandom numbers.

java.security.SecureRandom

This class provides a cryptographically strong random number generator (RNG).

java.util.concurrent.ThreadLocalRandom

A random number generator isolated to the current thread.

Random 具有两个构造器:

  • Random()
  • Random(long seed)

# 种子(seed)?

seed 即生成伪随机数算法的初始值。算法根据这个初始值来生成伪随机数。

A random seed (or seed state, or just seed) is a number (or vector) used to initialize a pseudorandom number generator.

https://en.wikipedia.org/wiki/Random_seed

# 不便之处(Random类无可指定范围的方法)

由于 Random 类不具有生成指定范围随机数的方法(除了一个nextInt(int bound)可生成从0到bound范围的随机数),这就有点不太方便了。

Java中的隨機數生成 (opens new window)

# Math.random()乘法方式

int max = 100;
int min = 0;
1
2

指定范围的随机浮点数:

double randomDouble = (Math.random() * ((max - min) + 1)) + min;
1

指定范围的随机整数:

int randomInt = (int) (Math.random() * ((max - min) + 1)) + min;
1

# ThreadLocalRandom 方式

java.util.concurrent.ThreadLocalRandom 为 java.util.Random 子类。该类具有可指定范围的生成随机数方法。

  • nextDouble(double bound) 范围从0到bound
  • nextDouble(double origin, double bound)范围从origin到bound
  • nextInt(int bound) 范围从0到bound
  • nextInt(int origin, double bound) 范围从origin到bound
  • ...
double randomDouble = ThreadLocalRandom.current().nextDouble(0.9, 1.5);

int randomLong = ThreadLocalRandom.current().nextLong(500000000000, 1000000000000);
1
2
3

注意

ThreadLocalRandom 是为线程而生的,所以要使用它的方法也就要遵从它的方式。该类的方法均通过它的一个静态方法current()来调用。

有意思的是,在IDE里面点到nextDouble(Double origin, Double bound)的源码会发现算法和上面的Math.random()乘法方式是一样的。所以

编辑 (opens new window)
上次更新: 2022/10/04, 21:45:45
Number & Math
Date & Calendar

← Number & Math Date & Calendar→

最近更新
01
《挪威的森林》
04-14
02
青钢影
04-14
03
Processing strings
02-18
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Jim Frank | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式