java.util.Random
1和措、java.util.Random類中實(shí)現(xiàn)的隨機(jī)算法是偽隨機(jī)汇恤,也就是有規(guī)律的隨機(jī)镜粤,所謂有規(guī)則的就是在給定種(seed)的區(qū)間內(nèi)隨機(jī)生成數(shù)字;
2官觅、相同種子數(shù)的Random對象刑峡,相同次數(shù)生成的隨機(jī)數(shù)字是完全相同的洋闽;
3、Random類中各方法生成的隨機(jī)數(shù)字都是均勻分布的突梦,也就是說區(qū)間內(nèi)部的數(shù)字生成的幾率均等诫舅;
下面Random()的兩種構(gòu)造方法:?
1.Random():創(chuàng)建一個(gè)新的隨機(jī)數(shù)生成器。
2.Random(long seed):使用單個(gè) long 種子創(chuàng)建一個(gè)新的隨機(jī)數(shù)生成器宫患。
在生成隨機(jī)數(shù)的時(shí)候要把種子seed帶入到一個(gè)公式里面骚勘,如下:
protected synchronized int next(int bits) {
? ? seed = (seed * multiplier + 0xbL) & ((1L << 48) - 1);
? ? return (int) (seed >>> (48 - bits));
}
Random() 是以當(dāng)前時(shí)間作為seed的
Random(long seed ) 是以給定的數(shù)作為seed的
種子數(shù)只是隨機(jī)算法的起源數(shù)字,和生成的隨機(jī)數(shù)的區(qū)間沒有任何關(guān)系撮奏。如下面的Java代碼:
Random rand =new Random(25);
int i;
i=rand.nextInt(100);
初始化時(shí)25并沒有起直接作用(注意:不是沒有起作用),rand.nextInt(100);中的100是隨機(jī)數(shù)的上限,產(chǎn)生的隨機(jī)數(shù)為0-100的整數(shù),不包括100。
1. 生成指定范圍隨機(jī)數(shù)
Random random = new Random();
//生成從 [start, INT_MAX)?
int randomNumber = start + random.nextInt();
//生成從 [start,end) 的隨機(jī)數(shù)
int randomNumber = start + random.nextInt(end);
2. 生成不重復(fù)的隨機(jī)數(shù)
package com.zoo.lion.util;
import java.util.ArrayList;
import java.util.Random;
public class RandomCoder {
? ? public static void main(String[] args) {
? ? ? ? random();
? ? }
? ? private static void random() {
? ? ? ? ArrayList list = getDiffNO(10);
? ? ? ? System.out.println();
? ? ? ? System.out.println("產(chǎn)生的n個(gè)不同的隨機(jī)數(shù):" + list);
? ? }
? ?// 生成n個(gè)不同的隨機(jī)數(shù)当宴,且隨機(jī)數(shù)區(qū)間為[0,10)
? ? private static ArrayList<Integer> getDiffNO(int n) {
? ? ? ? // 生成 [0-n) 個(gè)不重復(fù)的隨機(jī)數(shù)
? ? ? ? // list 用來保存這些隨機(jī)數(shù)
? ? ? ? ArrayList<Integer> list = new ArrayList<Integer>();
? ? ? ? Random rand = new Random();
? ? ? ? boolean[] bool = new boolean[n];
? ? ? ? int num = 0;
? ? ? ? for (int i = 0; i < n; i++) {
? ? ? ? ? ? do {
? ? ? ? ? ? ? ? // 如果產(chǎn)生的數(shù)相同繼續(xù)循環(huán)
? ? ? ? ? ? ? ? num = rand.nextInt(n);
? ? ? ? ? ? } while (bool[num]);
? ? ? ? ? ? bool[num] = true;
? ? ? ? ? ? list.add(num);
? ? ? ? }
? ? ? ? return list;
? ? }
}