Iterator与LIstIterator接口在java中的区别有哪些
569
2022-10-20
Java生成的随机数靠谱吗?多少次会重复?
一、前言
本文基于JDK1.8
最近在项目中碰到一个做订单号的需求,甲方的意思是以字母开头,后边跟年份和6位流水号.
我第一反应就是流水号用随机数生成,突然就想到一个问题,java的随机数真的靠谱吗?六位数大概是十万级别,Java可以保证一万次不重复吗?带着疑问,我通过三种生成随机数的方式做了三个测试.
二、利用Math.random()生成六位随机数测试
List
//记录计算次数
Long count=0L;
//记录循环次数
double a=0.0;
//记录多次计算的总值
Long sum=0L;
while (true){
count++;
Integer i = (int)((Math.random()*9+1)*100000);
System.out.println("第"+count+"次,i为:"+i);
if (list.contains(i)){
a++;
sum+=count;
count=0L;
list.clear();
if (a>=1000){
System.out.println("平均:"+(double)sum/a);
break;
}
}else{
list.add(i);
}
}
运行结果如下:
多次运行结果大概就是在取1100~1300次之间会出现重复.
三、利用new Random().nextInt(999999)生成随机数
List
//记录计算次数
Long count=0L;
//记录循环次数
double a=0.0;
//记录多次计算的总值
Long sum=0L;
while (true){
count++;
Integer i = new Random().nextInt(999999);
while (i<100000){
i=i*10;
}
aJEBZ System.out.println("第"+count+"次,i为:"+i);
if (list.contains(i)){
a++;
sum+=count;
count=0L;
list.clear();
if (a>=1000){
System.out.println("平均:"+(double)sum/a);
break;
}
}else{
list.add(i);
}
}
运行结果:
多次运行结果大概也是1100~1300次之间重复
四、利用ThreadLocalRandom.current().nextInt(100000,999999)生成随机数
(该方法也是hutool工具RandomUtil.random()的底层实现)
public static void main(String[] args) {
List
//记录计算次数
Long count=0L;
//记录循环次数
double a=0.0;
//记录多次计算的总值
Long sum=0L;
while (true){
count++;
Integer i = Thrhttp://eadLocalRandom.current().nextInt(100000,999999);
System.out.println("第"+count+"次,i为:"+i);
if (list.contains(i)){
a++;
sum+=count;
count=0L;
list.clear();
if (a>=1000){
System.out.println("平均:"+(double)sum/a);
break;
}
}else{
list.add(i);
}
}
}
运行结果:
平均次数也是1100~1300次之间重复,
五、在2的基础上做了新的随机
List
//记录计算次数
Long count=0L;
//记录循环次数
double a=0.0;
//记录多次计算的总值
Long sum=0L;
while (true){
count++;
Integer i = new Random().nextInt(999999);
while (i<100000){
i=Integer.parseInt(String.valueOf(i)+String.valueOf(new Random().nextInt(10)));
}
System.out.println("第"+count+"次,i为:"+i);
if (list.contains(i)){
a++;
sum+=count;
count=0L;
list.clear();
if (a>=1000){
System.out.println("平均:"+(double)sum/a);
break;
}
}else{
list.add(i);
}
}
运行结果
依然也是一千多次就会重复
由此暂时得出结论,以上的三(四)种生成随机数方法并不能达到万次不重复,大概在一千多次时就会出现重复的问题.
期待一个生成不重复六位随机数的方法
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~