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

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

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

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

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

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

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

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

1. java.util.Random

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

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

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

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

3. 什么是種子(seed)?

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

4. 線性同余算法

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

 
                

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

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

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

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

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 杭锦旗| 新晃| 惠东县| 吴江市| 永兴县| 姜堰市| 出国| 浮梁县| 合阳县| 三亚市| 石屏县| 泽普县| 吉安市| 洮南市| 中西区| 凤冈县| 陆良县| 景泰县| 禹州市| 临沭县| 鹤山市| 独山县| 庐江县| 怀宁县| 玉龙| 安多县| 福安市| 沽源县| 蒙自县| 潮州市| 定南县| 嘉义县| 崇州市| 乐至县| 五寨县| 儋州市| 淅川县| 航空| 罗定市| 安乡县| 衡阳县|