首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 產生隨機數的兩種核心方式詳解

     編輯:Java 相關知識

方式一:Math.random() 靜態方法

java.lang.Math.random() 無需導包,返回 double 範圍 [0.0, 1.0)。常用變換:

  • int n = (int)(Math.random() * 1000):0-999 整數
  • int n = (int)(Math.random() * (max - min + 1)) + min:[min, max] 區間
public class RandomTest {
    public static void main(String[] args) {
        double d = Math.random();           // 0.0-1.0
        double d1000 = Math.random() * 1000; // 0.0-1000.0
        int i1000 = (int)(Math.random() * 1000); // 0-999
        System.out.println(d); System.out.println(d1000); System.out.println(i1000);
    }
}

方式二:java.util.Random 對象

功能更豐富,支持多類型、種子控制:

import java.util.Random;

public class RandomTest {
    public static void main(String[] args) {
        Random random = new Random(); // 默認種子:System.nanoTime()
        System.out.println("int: " + random.nextInt());
        System.out.println("int[0,100): " + random.nextInt(100));
        System.out.println("long: " + random.nextLong());
        System.out.println("float: " + random.nextFloat());  // 0.0-1.0
        System.out.println("double: " + random.nextDouble()); // 0.0-1.0
        System.out.println("boolean: " + random.nextBoolean());
        System.out.println("bytes: " + Arrays.toString(random.bytes(new byte[10])));
    }
}

種子機制與可重現性

  • 默認種子:System.nanoTime() (高精度時間)
  • 指定種子:new Random(100L),相同種子產生完全相同序列
  • 應用:測試數據固定、加密協商、模擬復現
Random r1 = new Random(100);
Random r2 = new Random(100);
for (int i=0; i<5; i++) {
    System.out.println(r1.nextInt() + "\t" + r2.nextInt()); // 輸出完全一致
}

ThreadLocalRandom (Java 7+) 高並發首選

import java.util.concurrent.ThreadLocalRandom;
// 無競爭、無共享狀態、性能優於 Random
int n = ThreadLocalRandom.current().nextInt(100);
long l = ThreadLocalRandom.current().nextLong(1000, 2000);

SecureRandom:加密級隨機數

  • 用於密鑰生成、Token、Session ID、加密鹽值
  • 熵源:操作系統隨機設備 (/dev/urandom, Windows CryptoAPI)
  • 性能較慢,非加密場景勿用

選型指南

場景推薦類關鍵原因
簡單臨時隨機Math.random()無導包、一行代碼
多類型、區間、種子控制Random功能全、可重現
高並發、多線程環境ThreadLocalRandom無鎖、線程隔離、高性能
安全敏感 (密鑰、Token)SecureRandom不可預測、加密強度

出處:https://lavasoft.blog.51cto.com/62575/222076

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved