类 Random

类 Random 

public class Random
  
extends Object
implements Serializable
 

此类的实例用于生成伪随机数流。此类使用 48 位的种子,使用线性同余公式对其进行修改(请参阅 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 节)。

如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为了保证属性的实现,为类 Random 指定了特定的算法。为了 Java 代码的完全可移植性,Java 实现必须让类 Random 使用此处所示的所有算法。但是允许 Random 类的子类使用其他算法,只要其符合所有方法的常规协定即可。

Random 类所实现的算法使用一个 protected 实用工具方法,每次调用它都可提供最多 32 个伪随机生成的位。

很多应用程序会发现 Math 类中的 random 方法更易于使用。 方法:

public void setSeed(long seed)
使用单个 long 种子设置此随机数生成器的种子。 setSeed 的常规协定是它更改此随机数生成器对象的状态,使其状态好像是刚刚使用参数 seed 作为种子创建它的状态一样。Random 类按如下方式实现 setSeed 方法:
synchronized public void setSeed(long seed) {       this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1);       haveNextNextGaussian = false; }
Random 类实现的 setSeed 恰好只使用 48 位的给定种子。但是,通常重写方法可能使用 long 参数的所有 64 位作为种子值。 注:尽管种子值是一个基本的 AtomicLong,但仍必须对此方法同步,确保 haveNextNextGaussian 的语义正确。

 

参数:
seed - 初始种子。
protected int next(int bits)
生成下一个伪随机数。当此数被所有其他方法使用时,子类应该重写此数。

next 的常规协定是它返回一个 int 值,并且如果参数位处于 132(包括)之间,那么返回值的多数低位都将(大致)是单独选择的位值,每个位值是 01 的机会(大致)相等。Random 类按如下方式实现 next 方法:

 synchronized protected int next(int bits) {       seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);       return (int)(seed >>> (48 - bits)); }
这是一个线性同余伪随机数生成器,由 D. H. Lehmer 定义,Donald E. Knuth 在《 The Art of Computer Programming, Volume 2: Seminumerical Algorithms》的第 3.2.1 节中进行了描述。

 

参数:
bits - 随机位。
返回:
随机数生成器序列的下一个伪随机值。


你可能感兴趣的:(算法)