Java隨機數(shù)總結(jié)(第一部分)
隨機數(shù)在實際中使用很廣泛,比如要隨即生成一個固定長度的字符串、數(shù)字?;蛘唠S即生成一個不定長度的數(shù)字、或者進行一個模擬的隨機選擇等等。Java提供了最基本的工具,可以幫助開發(fā)者來實現(xiàn)這一切。
一、Java隨機數(shù)的產(chǎn)生方式
在Java中,隨機數(shù)的概念從廣義上將,有三種。
1、通過System.currentTimeMillis()來獲取一個當前時間毫秒數(shù)的long型數(shù)字。
2、通過Math.random()返回一個0到1之間的double值。
3、通過Random類來產(chǎn)生一個隨機數(shù),這個是專業(yè)的Random工具類,功能強大。
二、Random類API說明
1、Java API說明
Random類的實例用于生成偽隨機數(shù)流。此類使用 48 位的種子,使用線性同余公式對其進行修改(請參閱 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 節(jié))。
如果用相同的種子創(chuàng)建兩個 Random 實例,則對每個實例進行相同的方法調(diào)用序列,它們將生成并返回相同的數(shù)字序列。為了保證屬性的實現(xiàn),為類 Random 指定了特定的算法。
很多應(yīng)用程序會發(fā)現(xiàn) Math 類中的 random 方法更易于使用。
2、方法摘要
Random()
創(chuàng)建一個新的隨機數(shù)生成器。
Random(long seed)
使用單個 long 種子創(chuàng)建一個新隨機數(shù)生成器: public Random(long seed) { setSeed(seed); } next 方法使用它來保存隨機數(shù)生成器的狀態(tài)。
protected int next(int bits)
生成下一個偽隨機數(shù)。
boolean nextBoolean()
返回下一個偽隨機數(shù),它是從此隨機數(shù)生成器的序列中取出的、均勻分布的 boolean 值。
void nextBytes(byte[] bytes)
生成隨機字節(jié)并將其置于用戶提供的字節(jié)數(shù)組中。
double nextDouble()
返回下一個偽隨機數(shù),它是從此隨機數(shù)生成器的序列中取出的、在 0.0 和 1.0之間均勻分布的 double 值。
float nextFloat()
返回下一個偽隨機數(shù),它是從此隨機數(shù)生成器的序列中取出的、在 0.0 和 1.0 之間均勻分布的 float 值。
double nextGaussian()
返回下一個偽隨機數(shù),它是從此隨機數(shù)生成器的序列中取出的、呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,標準偏差是 1.0。
int nextInt()
返回下一個偽隨機數(shù),它是此隨機數(shù)生成器的序列中均勻分布的 int 值。
int nextInt(int n)
返回一個偽隨機數(shù),它是從此隨機數(shù)生成器的序列中取出的、在 0(包括)和指定值(不包括)之間均勻分布的 int值。
long nextLong()
返回下一個偽隨機數(shù),它是從此隨機數(shù)生成器的序列中取出的、均勻分布的 long 值。
void setSeed(long seed)
使用單個 long 種子設(shè)置此隨機數(shù)生成器的種子。
三、Random類使用說明
1、帶種子與不帶種子的區(qū)別Random類使用的根本是策略分帶種子和不帶種子的Random的實例。
通俗說,兩者的區(qū)別是:帶種子的,每次運行生成的結(jié)果都是一樣的。不帶種子的,每次運行生成的都是隨機的,沒有規(guī)律可言。
2、創(chuàng)建不帶種子的Random對象
Random random = new Random();
3、創(chuàng)建不帶種子的Random對象有兩種方法:
1) Random random = new Random(555L);
2) Random random = new Random();random.setSeed(555L);
【編輯推薦】