日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 生成随机数_Java 生成随机数的 N 种方法

發布時間:2025/3/15 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 生成随机数_Java 生成随机数的 N 种方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題:Java 生成隨機數的 N 種方法

www.baeldung.com/java-generating-random-numbers

1.引言

本文將探討用 Java 生成隨機數的不同方法。

2.Java API

Java API 提供了幾種隨機數生成方法。讓我們一起來了解一下。

2.1.java.lang.Math

Math 類中的 random 方法返回一個 [0.0, 1.0) 區間的 double 值。下面這段代碼能得到一個 min 和 max 之間的隨機數:

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

2.2.java.util.Random

Java 1.7 之前,最流行的隨機數生成方法是 nextInt。這個方法提供了帶參數和無參數兩個版本。不帶參數調用時,nextInt 會以近似相等概率返回任意 int 值,因此很可能會得到負數:

Random random = newRandom;

intrandomWithNextInt = random.nextInt;

如果調用 netxInt 時帶上 bound 參數,將得到預期區間內的隨機數:

intrandomWintNextIntWithinARange = random.nextInt(max - min) + min;

上面的代碼段能得到一個 [0, bound) 范圍內的隨機數。因此 bound 參數必須大于0。否則會拋出 java.lang.IllegalArgumentException 異常。

Java 8 引入了新的 ints 方法,返回一個java.util.stream.IntStream,讓我們看看如何使用。

不帶參數的 ints方法將返回一個無限 int 流:

IntStream unlimitedIntStream = random.ints;

調用時還可以指定參數來限制流大小:

IntStream limitedIntStream = random.ints(streamSize);

當然,也可以為生成數值設置最大值和最小值:

IntStream limitedIntStreamWithinARange = random.ints(streamSize, min, max);

2.3.java.util.concurrent.ThreadLocalRandom

Java 1.7 中ThreadLocalRandom類提供了一種新的更高效的隨機數生成方法。與 Random 類相比有三個重要區別:

無需顯式初始化 ThreadLocalRandom 實例。這樣可以避免創建大量無用的實例,浪費垃圾收集器回收時間。

不能為 ThreadLocalRandom 設置隨機種子(seed),這可能會導致問題。如果需要設置隨機種子,應該避免采用這種方式生成隨機數。

Random 類在多線程時表現不佳。

下面讓我們看看如何使用:

intrandomWithThreadLocalRandomInARange = ThreadLocalRandom.current.nextInt(min, max);

Java 8 及更高版本提供了幾種新方法。首先,nextInt 方法有兩個變體:

intrandomWithThreadLocalRandom = ThreadLocalRandom.current.nextInt;

intrandomWithThreadLocalRandomFromZero = ThreadLocalRandom.current.nextInt(max);

其次,還可以使用 ints 方法:

IntStream streamWithThreadLocalRandom = ThreadLocalRandom.current.ints;

2.4.java.util.SplittableRandom

Java 8 還帶來了一個快速隨機數生成器SplittableRandom類。

正如 JavaDoc 中描述的那樣,這是一個支持并行計算的隨機數生成器。值得注意的是,這個實例非線程安全。使用該類時需要當心。

現在有了 nextInt 和 ints 方法。調用 nextInt 時,可以通過參數指定 top 和 bottom 范圍:

SplittableRandom splittableRandom = newSplittableRandom;

intrandomWithSplittableRandom = splittableRandom.nextInt(min, max);

這樣可以檢查 max 參數是否大于 min。檢查失敗會收到一個到IllegalArgumentException。但是,這里不會進行正數或負數檢查。因此,參數可以填寫負數。也可以在調用時使用一個參數或者不使用參數。工作方式與之前描述的相同。

這里也提供了ints方法。這意味著可以輕松得到 int流。可以選擇流數據個數有限或無限。對于有限流,可以為數字生成范圍設置 top 和 bottom:

IntStream limitedIntStreamWithinARangeWithSplittableRandom = splittableRandom.ints(streamSize, min, max);

2.5.java.security.SecureRandom

如果應用程序對安全敏感,則應考慮使用SecureRandom。這是一個強加密隨機數生成器。實例默認構造函數不使用隨機種子。因此,我們應該:

設置隨機種子:隨機種子不可預測

設置 java.util.secureRandomSeed 系統屬性為 true。

該類繼承自java.util.Random。現在,我們介紹了上面各種隨機數生成方法。例如,如果需要獲取任意 int 值,調用 nextInt 時可以不帶參數:

SecureRandom secureRandom = newSecureRandom;

intrandomWithSecureRandom = secureRandom.nextInt;

如果需要設置隨機數生成范圍,則可以在調用時帶 bound 參數:

intrandomWithSecureRandomWithinARange = secureRandom.nextInt(max - min) + min;

切記,如果參數小于零會拋出 IllegalArgumentException。

3.第三方 API

上文的介紹中,Java 提供了許多隨機數生成類和方法。然而,也有很多第三方 API 可以生成隨機數。

下面對其中的一些進行介紹。

3.1.org.apache.commons.math3.random.RandomDataGenerator

Apache Commons 項目中 Commons 數學庫提供了很多生成器。最簡單,也可能最有用的是 RandomDataGenerator。它使用 Well19937c 算法生成隨機數。我們也可以自行提供隨機數算法。

讓我們看看如何使用。首先,添加依賴項:

org.apache.commons

commons-math3

3.6.1

最新版本的 commons-math3 可以在 Maven Central 中找到。

然后開始使用:

RandomDataGenerator randomDataGenerator = newRandomDataGenerator;

intrandomWithRandomDataGenerator = randomDataGenerator.nextInt(min, max);

3.2.it.unimi.dsi.util.XoRoShiRo128PlusRandom

這是最快的隨機數生成器之一。由米蘭大學信息科學系開發。

也可以在 Maven Central 倉庫中找到。首先,添加依賴項:

it.unimi.dsi

dsiutils

2.6.0

該生成器繼承了 java.util.Random 類。但是,如果仔細看一下 JavaDoc,就會發現只有一種調用方法——通過 nextInt 生成隨機數。最重要的是,該方法只提供無參和單個參數兩種版本。其他任何調用都將直接調用 java.util.Random 方法。

例如,如果想得到某個范圍內的隨機數,可以這樣寫:

XoRoShiRo128PlusRandom xoroRandom = newXoRoShiRo128PlusRandom;

intrandomWithXoRoShiRo128PlusRandom = xoroRandom.nextInt(max - min) + min;

4.總結

生成隨機數有很多辦法,但沒有最佳方法。因此,應當根據需求選擇最合適的方法。

本文的完整示例可以在 GitHub 上下載。

github.com/eugenp/tutorials/tree/master/java-numbers-3返回搜狐,查看更多

責任編輯:

總結

以上是生活随笔為你收集整理的java 生成随机数_Java 生成随机数的 N 种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩一区二区视频在线观看 | 欧美激情一区二区三区蜜桃视频 | 国产高清黄色 | 91久久精品一区二区三区 | 玖玖精品国产 | 亚洲最色网站 | 激情五月综合色婷婷一区二区 | 国产8区 | 国产一级影院 | 一区二区三区高清 | 综合精品久久久 | 免费看国产精品 | 欧美aa在线 | 精品动漫一区二区三区在线观看 | 国产中文视频 | 日本全黄裸体片 | 精品人妻一区二区三区久久嗨 | 国产精品一区二区在线看 | 欧美日韩精品久久久免费观看 | 性史性dvd影片农村毛片 | 日韩美一区二区 | 香蕉网站在线观看 | 久久久久人妻一区二区三区 | 亚洲播放| 日本福利片在线观看 | 欧美大片在线播放 | 久久首页 | 精品久久久久一区二区国产 | 91久久精品一区二区 | 亚洲综合色网 | 激情xxxx | 欧美性激情 | 超碰人人人人人 | 黑料av在线| 免费成人深夜夜行p站 | 婷婷综合激情网 | www黄色大片 | 香蕉视频三级 | 淫欲少妇 | 可以在线看黄的网站 | 红桃成人在线 | 免费看麻豆 | 国产精品69久久 | 欧美激情视频一区 | 免费播放片大片 | 九九爱视频 | 狠狠躁18三区二区一区传媒剧情 | 顶级毛茸茸aaahd极品 | 亚洲欧美婷婷 | 亚洲日本中文字幕在线 | 亚洲自拍激情 | 久久国产精品免费观看 | 女大学生的家政保姆初体验 | 亚洲精品人 | 穿越异世荒淫h啪肉np文 | 巨乳美女在线 | 一区二区三区免费在线观看 | 亚洲射| 在线免费观看黄色网址 | 99国产精 | 精品国产一区二区三区四区精华 | 久草欧美视频 | 欧美一区二区在线视频观看 | 欧美一区二区三区久久妖精 | 性一交一乱一色一免费无遮挡 | 成人h动漫精品一区二区器材 | 成人av综合网 | 国产欧美视频在线播放 | 极品91尤物被啪到呻吟喷水 | 黄色永久免费网站 | 人人舔人人爽 | 四虎国产在线观看 | 萌白酱在线观看 | 国产高清在线视频 | 美女诱惑一区二区 | 欧美精品一区二区三区久久久 | 日韩欧美高清在线视频 | 美女擦边视频 | 精品国产va久久久久久久 | 高潮无码精品色欲av午夜福利 | 草草视频在线播放 | 法国空姐在线观看完整版 | 欧美五月婷婷 | 六月丁香激情综合 | 3d欧美精品动漫xxxx无尽 | 中文久久久 | 国产乱轮视频 | 色偷偷久久| 亚洲精品污一区二区三区 | 在线免费观看一区二区三区 | 九九99久久| 污黄视频在线观看 | 四虎国产 | 免费美女av | 亚洲精品系列 | 青春草免费视频 | 极品美女销魂一区二区三区 | 丰满人妻一区二区三区无码av | 99热在线观看免费精品 |