一、随机数
在Java中,生成随机数可以通过多种方式实现,最常见的是使用java.util.Random
类,或者从Java 7开始引入的java.security.SecureRandom
类(适用于需要更高安全性的随机数生成)。此外,从Java 8开始,你还可以使用java.util.concurrent.ThreadLocalRandom
类,它在多线程环境下提供了更好的性能。
1-1、Random
类
示例:
import java.util.Random;
public class RandomExample {
public static void main(String[] args) {
Random rand = new Random();
// 生成一个整数
int randomInt = rand.nextInt(); // 注意:这将返回一个负整数或正整数,包括0
// 如果你想要一个特定范围的随机整数,可以使用
int randomIntInRange = rand.nextInt(100); // 生成一个0到99之间的整数
// 生成一个double类型的随机数
double randomDouble = rand.nextDouble(); // 生成一个[0.0, 1.0)区间的随机double值
System.out.println("Random Integer: " + randomIntInRange);
System.out.println("Random Double: " + randomDouble);
}
}
1-2、SecureRandom类
如果你需要更高安全性的随机数,比如加密用途,可以使用SecureRandom
。
import java.security.SecureRandom;
public class SecureRandomExample {
public static void main(String[] args) {
SecureRandom secureRandom = new SecureRandom();
// 生成一个byte数组
byte[] bytes = new byte[16];
secureRandom.nextBytes(bytes);
// 生成一个整数
int randomInt = secureRandom.nextInt(100); // 类似Random
// 生成一个double类型的随机数
double randomDouble = secureRandom.nextDouble(); // 类似Random
System.out.println("Random Integer: " + randomInt);
System.out.println("Random Double: " + randomDouble);
// 注意:SecureRandom也常用于生成密钥等安全相关的随机数
}
}
1-3、ThreadLocalRandom类
对于多线程应用,ThreadLocalRandom
提供了更好的性能,因为它避免了在多个线程之间共享Random
实例时可能发生的竞争条件。
import java.util.concurrent.ThreadLocalRandom;
public class ThreadLocalRandomExample {
public static void main(String[] args) {
// 生成一个整数
int randomInt = ThreadLocalRandom.current().nextInt(100); // 生成一个0到99之间的整数
// 生成一个double类型的随机数
double randomDouble = ThreadLocalRandom.current().nextDouble(); // 生成一个[0.0, 1.0)区间的随机double值
System.out.println("Random Integer: " + randomInt);
System.out.println("Random Double: " + randomDouble);
}
}
二、生成任意范围的随机数
import java.util.Random;
public class RandomRangeExample {
public static void main(String[] args) {
Random rand = new Random();
// 假设我们想要生成一个范围在[min, max]之间的随机整数(包括min和max)
int min = 10;
int max = 50;
// 注意:nextInt(int bound) 是生成一个[0, bound)的随机数,因此我们需要调整范围
int randomInt = rand.nextInt((max - min) + 1) + min;
System.out.println("Random Integer in [" + min + ", " + max + "]: " + randomInt);
}
}
(max - min) + 1
计算了范围[min, max]
内可能的不同整数值的数量(包括边界值),然后nextInt(int bound)
方法生成了一个在[0, bound)
范围内的随机数,最后通过加上min
来调整范围以包括min
和max
。