1. 隨機函數 Math.random()
Math.random(); 取值范圍是
[ 0.0,1.0 )
的左閉右開區間。具體源代碼如下所示:


Math.random()是生成0~1之間的小數(double類型的),類似生成的結果如下圖所示:


最上面的兩個圖貼出來的是Math.random()的源代碼,當我們開始直接使用Math.random()的時候,發現進入會判斷random是否為空,如果為空則創建一個Random對象否則直接通過這個random生成一個0 ~ 1 之間的double類型小數。應用案例:


2. 隨機函數 java.util.Random()
下面Random()的兩種構造方法:
Random():創建一個新的隨機數生成器。
Random(long seed):使用單個 long 種子創建一個新的隨機數生成器。
我們可以在構造Random對象的時候指定種子,如:Random r1 = new Random(20);或者默認當前系統時間的毫秒數作為種子數:Random r1 = new Random();
具體隨機種子源代碼如下:
需要說明的是:你在創建一個Random對象的時候可以給定任意一個合法的種子數,種子數只是隨機算法的起源數字,和生成的隨機數的區間沒有任何關系。如下面的Java代碼:
初始化時25並沒有起直接作用(注意:不是沒有起作用),rand.nextInt(100);中的100是隨機數的上限,產生的隨機數為0-100的整數,不包括100 --> [0 , 100)
課外引入:
產生隨機數函數以及線程池中的一些函數使用的都是System.nanoTime,System.nanoTime提供相對精確的計時,但是不能用他來計算當前日期。
此方法只能用於測量已過的時間,與系統或鍾表時間的其他任何時間概念無關。返回值表示從某一固定但任意的時間算起的毫微秒數
具體不同案例對比如下:
<1. 種子相同的隨機數


<2. 缺省參數的隨機數

