亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

Java隨機數的幾種有趣用法

瀏覽:2日期:2022-09-06 13:07:16

眾所周知,隨機數是任何一種編程語言最基本的特征之一。而生成隨機數的基本方式也是相同的:產生一個0到1之間的隨機數。看似簡單,但有時我們也會忽略了一些有趣的功能。

Java隨機數的幾種有趣用法

我們從書本上學到什么?

最明顯的,也是直觀的方式,在Java中生成隨機數只要簡單的調用:

java.lang.Math.random()

在所有其他語言中,生成隨機數就像是使用Math工具類,如abs, pow, floor, sqrt和其他數學函數。大多數人通過書籍、教程和課程來了解這個類。一個簡單的例子:從0.0到1.0之間可以生成一個雙精度浮點數。那么通過上面的信息,開發人員要產生0.0和10.0之間的雙精度浮點數會這樣來寫:

Math.random() * 10

而產生0和10之間的整數,則會寫成:

Math.round(Math.random() * 10)進階

通過閱讀Math.random()的源碼,或者干脆利用IDE的自動完成功能,開發人員可以很容易發現,java.lang.Math.random()使用一個內部的隨機生成對象 – 一個很強大的對象可以靈活的隨機產生:布爾值、所有數字類型,甚至是高斯分布。例如:

new java.util.Random().nextInt(10)

它有一個缺點,就是它是一個對象。它的方法必須是通過一個實例來調用,這意味著必須先調用它的構造函數。如果在內存充足的情況下,像上面的表達式是可以接受的;但內存不足時,就會帶來問題。

一個簡單的解決方案,可以避免每次需要生成一個隨機數時創建一個新實例,那就是使用一個靜態類。猜你可能想到了java.lang.Math,很好,我們就是改良java.lang.Math的初始化。雖然這個工程量低,但你也要做一些簡單的單元測試來確保其不會出錯。

假設程序需要生成一個隨機數來存儲,問題就又來了。比如有時需要操作或保護種子(seed),一個內部數用來存儲狀態和計算下一個隨機數。在這些特殊情況下,共用隨機生成對象是不合適的。

并發

在Java EE多線程應用程序的環境中,隨機生成實例對象仍然可以被存儲在類或其他實現類,作為一個靜態屬性。幸運的是,java.util.Random是線程安全的,所以不存在多個線程調用會破壞種子(seed)的風險。

另一個值得考慮的是多線程java.lang.ThreadLocal的實例。偷懶的做法是通過Java本身API實現單一實例,當然你也可以確保每一個線程都有自己的一個實例對象。

雖然Java沒有提供一個很好的方法來管理java.util.Random的單一實例。但是,期待已久的Java 7提供了一種新的方式來產生隨機數:

java.util.concurrent.ThreadLocalRandom.current().nextInt(10)

這個新的API綜合了其他兩種方法的優點:單一實例/靜態訪問,就像Math.random()一樣靈活。ThreadLocalRandom也比其他任何處理高并發的方法要更快。

經驗

Chris Marasti-Georg 指出:

Math.round(Math.random() * 10)

使分布不平衡,例如:0.0 – 0.499999將四舍五入為0,而0.5至1.499999將四舍五入為1。那么如何使用舊式語法來實現正確的均衡分布,如下:

Math.floor(Math.random() * 11)

幸運的是,如果我們使用java.util.Random或java.util.concurrent.ThreadLocalRandom就不用擔心上述問題了。

Java實戰項目里面介紹了一些不正確使用java.util.Random API的危害。這個教訓告訴我們不要使用:

Math.abs(rnd.nextInt())%n

而使用:

rnd.nextInt(n)

標簽: Java
相關文章:
主站蜘蛛池模板: 国产成人v爽在线免播放观看 | 97精品国产综合久久久久久欧美 | 亚州视频一区 | www.夜夜骑.com| 午夜视频一区二区 | 中文字幕在线视频在线看 | 欧美久久久久欧美一区 | 最新更新国内自拍视频 | 国产高清av在线播放 | 成人久久在线 | 精品国产日韩亚洲一区在线 | 国产三级做爰高清在线 | 亚洲 欧美 国产 中文 | 神马最新午夜限制片 | 美女张开腿给人网站 | 日韩毛片欧美一级a | 国产波多野结衣中文在线播放 | 日韩中文字幕在线观看视频 | 精品久久成人免费第三区 | 日本免费一区二区三区毛片 | 成人羞羞视频国产 | 亚洲欧美一区二区三区综合 | 久章草在线视频 | 欧美—级v免费大片 | 亚洲成av人片在线观看 | 欧美一区二区日韩一区二区 | 男女乱淫视频 | 国产成人亚洲综合91精品555 | 久久毛片免费看 | 亚洲精品人成在线观看 | 欧美一级艳片视频免费观看 | 中国一级淫片aaa毛片毛片 | 亚洲欧洲日产国码二区在线 | 国内精品久久久久久久久 | 亚洲免费网址 | 亚洲成人免费在线 | 337p粉嫩日本亚洲大胆艺术照 | 日韩不卡一级毛片免费 | 99久久亚洲综合精品网站 | 怡红院在线观看在线视频 | 中国美女一级看片 |