package com.wonders.api.date;
import java.util.Random;
/**
* JDK1.7
* Random
* (1)这个类的实例是用来生成一串数字随机数。该类使用一个48比特位的种子,使用一个线性一直的公式来修改。
* (2)如果该类有两个具有相同种子的实例被创建出来,为每一个实例调用相同的方法的序列,它们将生成相同的数字序列返回。
* (3)为了保证这种性质,Random类使用了特殊的算法.为了实现Java代码的绝对可移植性,Java实现必须使用这里显示的所有算法.
* 然而,只要它们遵守所有方法的一般约定,Rondom的子类允许使用其他的算法。
* (4)由类Random实现的算法使用一种受保护的实用方法,每次调用可以提供32个伪随机生成位.
* (5)很多应用中都可以发现Math.random()的使用.
* (6)java.util.Random的实例是线程安全的,相同的 java.util.Random实例的并发使用跨线程可能会遇到资源竞争和随之而来的糟糕表现。
* (7)可以考虑在多线程中使用类ThreadLocalRandom.
* (8)java.util.Random的实例并不是加密安全的,可以考虑使用SecureRandom获得一个加密安全的伪随机数生成器,用于安全敏感的应用程序.
* (9)有两个构造方法
* (a)Random():创建一个新的随机数生成器。这个构造函数将设置该随机数生成器的种子,这个值是一个很可能与此构造函数的任何其他调用不同的值。
* (b)Random(long seed):使用一个long类型的种子创建一个新生的随机数生成器.这个种子值是伪随机数生成器内部的初始化值,这个种子是通过next(int)来维护的.
* 这个构造器的调用等价于:Random r = new Random();r.setSeed(seed);
* 参数seed是:初始化的随机数种子.
* @author liyongyong
*
*/
public class RandomTest {
public static void main(String[] args) {
Random random = new Random();
/**
* public void setSeed(long seed)
* 使用一个单独的long类型数值来设置随机数生成器的种子。
* setSeed的一般规定是,它改变了这个随机数生成器对象的状态,目的是让它与刚刚创建的参数种子的状态完全相同。
* 类Random的setSeed方法是通过原子性的更新种子((seed ^ 0x5DEECE66DL) & ((1L << 48) - 1))并且
* 通过调用 nextGaussian()来清除haveNextNextGaussian的标志.
* 类Random的setSeed的实现恰巧使用了给定种子的48比特位。
* 然而,一般来说,重写方法可以使用长参数的所有64位作为种子值。
*/
/**
* 返回一个int类型的随机数
*/
int num = random.nextInt(100);
System.out.println("100以内的随机数是 : " + num);
/**
* 返回一个布尔类型的随机数
*/
boolean flag = random.nextBoolean();
System.out.println("返回的随机数是 " + flag);
/**
* 返回一个double类型的随机数
*/
double d = random.nextDouble();
System.out.println("返回的double类型随机数是 : " + d);
/**
* 返回一个float类型的随机数
*/
float f = random.nextFloat();
System.out.println("返回的float类型随机数是 : " + f);
/**
* 返回一个long类型的随机数
*/
long l = random.nextLong();
System.out.println("返回的long类型随机数是 : " + l);
}
}
API学习Random类随机数生成
最新推荐文章于 2024-06-30 18:02:26 发布