当前位置:首页 > 科技  > 软件

如何用 Java 高效的生成随机数?Random 的原理是什么?

来源: 责编: 时间:2024-05-16 09:05:50 271观看
导读在 JDK的java.util包里提供了一个用于生成随机数的Random类,它是如何生成随机数的?为什么它生成的随机数是均匀的?今天我们一起来聊聊其背后的原理。本文基于Java语言,jdk 11。1. java.util.RandomRandom是 java.util 包

在 JDK的java.util包里提供了一个用于生成随机数的Random类,它是如何生成随机数的?为什么它生成的随机数是均匀的?今天我们一起来聊聊其背后的原理。0WP28资讯网——每日最新资讯28at.com

本文基于Java语言,jdk 11。0WP28资讯网——每日最新资讯28at.com

0WP28资讯网——每日最新资讯28at.com

0WP28资讯网——每日最新资讯28at.com

1. java.util.Random

Random是 java.util 包提供的一个用于生成随机数的类,首先,我们看看官方对它的描述:0WP28资讯网——每日最新资讯28at.com

0WP28资讯网——每日最新资讯28at.com

通过源码,我们总结出几个核心点:0WP28资讯网——每日最新资讯28at.com

  • Random类的实例是用来生成一系列的伪随机数;
  • Random类使用一个 48位的种子(seed),通过线性同余算法进行修改;
  • Random类的特定算法被指定,所以,两个Random类的实例使用相同的种子创建,并且对于每个实例都调用相同顺序的方法,它们将生成并返回相同的数字序列
  • Random类是线程安全的,但是,跨线程同时使用同一个java.util.Random实例可能会遇到竞争和相应的性能问题;
  • 在多线程设计中,考虑使用java.util.concurrent.ThreadLocalRandom;
  • Random类的实例不是密码安全的,对于安全敏感的应用程序,考虑使用java.security.SecureRandom;

2. 什么是伪随机数?

伪随机数指的是一种看起来像随机数的序列,但实际上是由确定性算法生成的。这种算法称为伪随机数生成器(PRNG,Pseudo-Random Number Generator)。0WP28资讯网——每日最新资讯28at.com

PRNG使用一个称为”种子”的初始值,然后通过一系列的数学运算来生成一个序列,这个序列看起来具有随机性的特征,比如均匀分布、无序性等。0WP28资讯网——每日最新资讯28at.com

3. 什么是种子(seed)?

在随机数生成器中,种子(seed)其实就是一个起始值,它用于初始化随机数生成器的状态。随机数生成器使用这个种子来确定生成随机数的序列。种子决定了随机数生成器的初始状态,因此给定相同的种子,将会生成相同的随机数序列。0WP28资讯网——每日最新资讯28at.com

4. 线性同余算法

线性同余算法(LCG,Linear Congruential Generator)是最基本的伪随机数生成算法之一,该算法通常使用如下方程表示:0WP28资讯网——每日最新资讯28at.com

 
                

本文链接:http://www.28at.com/showinfo-26-88333-0.html如何用 Java 高效的生成随机数?Random 的原理是什么?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 聊聊C#中的委托与事件

下一篇: Python中的文档处理神器:深度解析python-docx库

标签:
  • 热门焦点
  • Redmi Buds 4开箱简评:才199还有降噪 可以无脑入

    在上个月举办的Redmi Note11T Pro系列新机发布会上,除了两款手机新品之外,Redmi还带来了两款TWS真无线蓝牙耳机产品,Redmi Buds 4和Redmi Buds 4 Pro,此前我们在Redmi Note11T
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    今天这篇文章跟大家分享18个JS单行代码,你只需花几分钟时间,即可帮助您了解一些您可能不知道的 JS 知识,如果您已经知道了,就当作复习一下,古人云,温故而知新嘛。现在,我们就开始今
  • 这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • 微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事“起猛了,我能看得懂日语了”。“为什么日本人说话我能听懂?”“中文不像中文,日语不像日语,但是我竟然看懂了”…&hell
  • 华为HarmonyOS 4升级计划公布:首批34款机型今日开启公测

    8月4日消息,今天下午华为正式发布了HarmonyOS 4系统,在更流畅的前提下,还带来了不少新功能,UI设计也有变化,会让手机焕然一新。华为宣布,首批机型将会在
  • 微软发布Windows 11新版 引入全新任务栏状态

    近日,微软发布了Windows 11新版,而Build 22563更新主要引入了几周前曝光的平板模式任务栏等,系统更流畅了。更新中,Windows 11加入了专门针对平板优化的任务栏
Top