Random类属于java.util类的子类,同时它实现的接口是Serialzable(序列化)。即public class Random extends Object implements Serialzable { }.
random这个类是用来产生一串伪随机数的(维基百科:伪随机数(或称为乱数),是使用一个确定性的算法计算出来的似乎是随机的数序),因此伪随机数实际上并不随机。在计算伪随机数时假如使用的开始值不变的话,那么伪随机数的数序也不变,例,random(4),产生的一串数,它是不变的,而“4”叫做种子)
random类中的种子数值可以达到48比特,它是用线性同余公式来进行修改得到的伪随机数的。
如果创建两个具有相同种子的random对象,那么他们产生的伪随机数是相同的。
如下:
public classUsingStringBuilder {
public staticRandomrand=newRandom(0);
public staticStringrandom1() {
StringBuilder result =newStringBuilder("[");
for(inti =0;i <5;i++) {
result.append(rand.nextInt(100));
result.append(", ");
}
result.delete(result.length() -2,result.length());
result.append("]");
returnresult.toString();
}
public staticStringrandom2() {
StringBuilder result =newStringBuilder("[");
for(inti =0;i <5;i++) {
result.append(rand.nextInt(100));
result.append(", ");
}
result.delete(result.length() -2,result.length());
result.append("]");
returnresult.toString();
}
public static voidmain(String[] args) {
// String a = random2();
System.out.println("random1序列值"+random1().toString());
System.out.println("random2序列值"+random2().toString());
}
}
为了保证这个属性,为random类指定了特定的算法,为了java代码的绝对可移植性,java实现时必须使用Random类所示的所有算法。不过random的子类则允许使用其他的算法,只要他们遵守所有方法中的正常的要求即可。
由random类实现的算法用了保护的实用程序方法,每个调用可提供多达32位的伪随机数。
//这使得Math中的random()使用更加的方便。
java.util.Random的实现是在线程安全情况下实现的,然而,跨线程同时使用相同的java.util.Random实现可能会遇到冲突,从而导致性能下降。如果在多线程设计模式下,读者要考虑使用Class ThreadLocalRandom 。
由于java.util.Random的实例化不是加密安全的,读者可以参考使用SercureRandom来获得一个加密安全的伪随机生成器供安全敏感应用程序使用。