日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

如何用 Java 高效的生成隨機數?Random 的原理是什么?

來源: 責編: 時間:2024-05-16 09:05:50 144觀看
導讀在 JDK的java.util包里提供了一個用于生成隨機數的Random類,它是如何生成隨機數的?為什么它生成的隨機數是均勻的?今天我們一起來聊聊其背后的原理。本文基于Java語言,jdk 11。1. java.util.RandomRandom是 java.util 包

在 JDK的java.util包里提供了一個用于生成隨機數的Random類,它是如何生成隨機數的?為什么它生成的隨機數是均勻的?今天我們一起來聊聊其背后的原理。Kxv28資訊網——每日最新資訊28at.com

本文基于Java語言,jdk 11。Kxv28資訊網——每日最新資訊28at.com

Kxv28資訊網——每日最新資訊28at.com

Kxv28資訊網——每日最新資訊28at.com

1. java.util.Random

Random是 java.util 包提供的一個用于生成隨機數的類,首先,我們看看官方對它的描述:Kxv28資訊網——每日最新資訊28at.com

Kxv28資訊網——每日最新資訊28at.com

通過源碼,我們總結出幾個核心點:Kxv28資訊網——每日最新資訊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)。Kxv28資訊網——每日最新資訊28at.com

PRNG使用一個稱為”種子”的初始值,然后通過一系列的數學運算來生成一個序列,這個序列看起來具有隨機性的特征,比如均勻分布、無序性等。Kxv28資訊網——每日最新資訊28at.com

3. 什么是種子(seed)?

在隨機數生成器中,種子(seed)其實就是一個起始值,它用于初始化隨機數生成器的狀態。隨機數生成器使用這個種子來確定生成隨機數的序列。種子決定了隨機數生成器的初始狀態,因此給定相同的種子,將會生成相同的隨機數序列。Kxv28資訊網——每日最新資訊28at.com

4. 線性同余算法

線性同余算法(LCG,Linear Congruential Generator)是最基本的偽隨機數生成算法之一,該算法通常使用如下方程表示:Kxv28資訊網——每日最新資訊28at.com

 
                

本文鏈接:http://www.www897cc.com/showinfo-26-88333-0.html如何用 Java 高效的生成隨機數?Random 的原理是什么?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

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

下一篇: Python中的文檔處理神器:深度解析python-docx庫

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 广宗县| 襄城县| 班戈县| 瑞昌市| 怀柔区| 噶尔县| 雷波县| 江西省| 资中县| 弋阳县| 临武县| 娄底市| 万盛区| 益阳市| 台前县| 前郭尔| 梁河县| 固阳县| 屯门区| 若尔盖县| 闵行区| 卢氏县| 克拉玛依市| 临海市| 台北县| 融水| 高雄市| 栾城县| 达日县| 建水县| 甘南县| 通许县| 郁南县| 崇信县| 琼海市| 会东县| 湘潭县| 铅山县| 平和县| 沁水县| 大同市|