獲取當前時間戳和隨機數的獲取、Java Random、ThreadLocalRandom、UUID類中的方法應用(隨機數)

渴望飛的魚發表於2018-04-10

(一)獲取時間戳:

第一種方法:

var timestamp = Date.parse(new Date());

結果:1280977330000
第二種方法:

var timestamp = (new Date()).valueOf();

結果:1280977330748

第三種方法:

var timestamp=new Date().getTime();
結果:1280977330748

第一種:獲取的時間戳是把毫秒改成000顯示,即獲取秒數。
第二種和第三種是獲取了當前毫秒的時間戳。


獲取隨機數:

Math.random(); 返回0和1間(包括0,不包括1)的一個隨機數。

Math.ceil(n); 返回大於等於n的最小整數。
用Math.ceil(Math.random()*10);時,主要獲取1到10的隨機整數,取0的機率極小。

Math.round(n); 返回n四捨五入後整數的值。
用Math.round(Math.random());可均衡獲取0到1的隨機整數。
用Math.round(Math.random()*10);時,可基本均衡獲取0到10的隨機整數,其中獲取最小值0和最大值10的機率少一半。

Math.floor(n); 返回小於等於n的最大整數。

用Math.floor(Math.random()*10);時,可均衡獲取0到9的隨機整數。

(二)Java Random、ThreadLocalRandom、UUID類中的方法應用(隨機數)

1.Random:產生一個偽隨機數(通過相同的種子,產生的隨機數是相同的);

1
2
3
4
Random r=new Random();
System.out.println(r.nextBoolean());
System.out.print(r.nextInt(50));//隨機生成0~50的隨機數,不包括50
System.out.println(r.nextInt(20)+30);//隨機生成30~50的隨機數,不包括50

2.ThreadLocalRandom:是JDK 7之後提供併發產生隨機數,能夠解決多個執行緒發生的競爭爭奪。ThreadLocalRandom不是直接用new例項化,而是第一次使用其靜態方法current()。
從Math.random()改變到ThreadLocalRandom有如下好處:
我們不再有從多個執行緒訪問同一個隨機數生成器例項的爭奪。
取代以前每個隨機變數例項化一個隨機數生成器例項,我們可以每個執行緒例項化一個。

1
2
3
ThreadLocalRandom t=ThreadLocalRandom.current();
System.out.println(t.nextInt(50));//隨機生成0~50的隨機數,不包括50
System.out.println(t.nextInt(3050));//隨機生成30~50的隨機數,不包括50

 

3.UUID:  UUID含義是通用唯一識別碼 (Universally Unique Identifier),這 是一個軟體建構的標準,也是被開源軟體基金會 (Open Software Foundation, OSF) 的組織在分散式計算環境 (Distributed Computing Environment, DCE) 領域的一部份。UUID 的目的,是讓分散式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。如此一來,每個人都可以建立不與其它人衝突的 UUID。在這樣的情況下,就不需考慮資料庫建立時的名稱重複問題。目前最廣泛應用的 UUID,即是微軟的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的應用,則有 Linux ext2/ext3 檔案系統、LUKS 加密分割區、GNOME、KDE、Mac OS X 等等。

1
2
String u=UUID.randomUUID().toString();
System.out.println(u);

 

 生成5個字元的驗證碼:

1
2
3
4
5
6
7
8
9
10
String content="ABCDEFGHIJKLMNOPQRSTUVWHYZ";//建立23個大寫字母的字串
content+=content.toLowerCase();//把大寫字母轉換成小寫字母,相連線
content+="0123456789";//連線0~9的數字。
Random r=new Random();//建立一個隨機數物件
StringBuilder b=new StringBuilder(5);//建立空間大小為5的StringBuilder物件
for (int i = 0; i <5; i++) {
    char n=content.charAt(r.nextInt(content.length()));//擷取一個從0到content.length()之間的字元,迴圈輸出5個不同的字元,追加到一起
    b.append(n);
}
System.out.println(b.toString());//轉成字串輸出5個字元

 

 

 




相關文章