欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java生成的隨機數(shù)靠譜嗎?多少次會重復?

 更新時間:2021年06月10日 14:28:41   作者:LwinnerG  
今天給大家?guī)淼氖顷P于Java的相關知識,文章圍繞著Java生成的隨機數(shù)靠不靠譜展開,文中有非常詳細的介紹,需要的朋友可以參考下

一、前言

本文基于JDK1.8

最近在項目中碰到一個做訂單號的需求,甲方的意思是以字母開頭,后邊跟年份和6位流水號.
我第一反應就是流水號用隨機數(shù)生成,突然就想到一個問題,Java的隨機數(shù)真的靠譜嗎?六位數(shù)大概是十萬級別,Java可以保證一萬次不重復嗎?帶著疑問,我通過三種生成隨機數(shù)的方式做了三個測試.

二、利用Math.random()生成六位隨機數(shù)測試

  List<Integer> list=new ArrayList<>();
        //記錄計算次數(shù)
        Long count=0L;
        //記錄循環(huán)次數(shù)
        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次之間會出現(xiàn)重復.

三、利用new Random().nextInt(999999)生成隨機數(shù)

 List<Integer> list=new ArrayList<>();
        //記錄計算次數(shù)
        Long count=0L;
        //記錄循環(huán)次數(shù)
        double a=0.0;
        //記錄多次計算的總值
        Long sum=0L;
        while (true){
            count++;
            Integer i = new Random().nextInt(999999);
            while (i<100000){
                i=i*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);
            }
        }

運行結果:

在這里插入圖片描述

多次運行結果大概也是1100~1300次之間重復

四、利用ThreadLocalRandom.current().nextInt(100000,999999)生成隨機數(shù)

(該方法也是hutool工具RandomUtil.random()的底層實現(xiàn))

 public static void main(String[] args) {
        List<Integer> list=new ArrayList<>();
        //記錄計算次數(shù)
        Long count=0L;
        //記錄循環(huán)次數(shù)
        double a=0.0;
        //記錄多次計算的總值
        Long sum=0L;
        while (true){
            count++;
            Integer i = ThreadLocalRandom.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);
            }
        }
    }

運行結果:

在這里插入圖片描述

平均次數(shù)也是1100~1300次之間重復,

五、在2的基礎上做了新的隨機

     List<Integer> list=new ArrayList<>();
        //記錄計算次數(shù)
        Long count=0L;
        //記錄循環(huán)次數(shù)
        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);
            }
        }

運行結果

在這里插入圖片描述

依然也是一千多次就會重復

由此暫時得出結論,以上的三(四)種生成隨機數(shù)方法并不能達到萬次不重復,大概在一千多次時就會出現(xiàn)重復的問題.

期待一個生成不重復六位隨機數(shù)的方法

到此這篇關于Java生成的隨機數(shù)靠譜嗎?會重復嗎?的文章就介紹到這了,更多相關Java隨機數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 一個通用的Java分頁基類代碼詳解

    一個通用的Java分頁基類代碼詳解

    這篇文章主要介紹了一個通用的Java分頁基類代碼詳解,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Springboot自定義注解&傳參&簡單應用方式

    Springboot自定義注解&傳參&簡單應用方式

    SpringBoot框架中,通過自定義注解結合AOP可以實現(xiàn)功能如日志記錄與耗時統(tǒng)計,首先創(chuàng)建LogController和TimeConsuming注解,并為LogController定義參數(shù),然后,在目標方法上應用這些注解,最后,使用AspectJ的AOP功能,通過切點表達式定位這些注解
    2024-10-10
  • 老生常談反射之Class類的使用(必看篇)

    老生常談反射之Class類的使用(必看篇)

    下面小編就為大家?guī)б黄仙U劮瓷渲瓹lass類的使用(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Java自定義類加載器實現(xiàn)類隔離詳解

    Java自定義類加載器實現(xiàn)類隔離詳解

    由于每種組件的不同版本所依賴的jar包不同,我們可以借鑒tomcat的實現(xiàn)方式,通過自定義類加載器打破雙親委派機制來實現(xiàn)類隔離,從而達到操作多組件多版本的目的。本文就來和大家詳細聊聊實現(xiàn)方法
    2023-03-03
  • java實現(xiàn)相同屬性名稱及相似類型的pojo、dto、vo等互轉操作

    java實現(xiàn)相同屬性名稱及相似類型的pojo、dto、vo等互轉操作

    這篇文章主要介紹了java實現(xiàn)相同屬性名稱及相似類型的pojo、dto、vo等互轉操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • MyBatis的MapKey注解實例解析

    MyBatis的MapKey注解實例解析

    這篇文章主要為大家介紹了MyBatis的MapKey注解實例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Java Character類的詳解

    Java Character類的詳解

    本篇文章主要詳細介紹了JAVA中 Character類 方法等,需要的朋友可以參考下
    2017-04-04
  • Quarkus中的依賴注入DI和面向切面aop編程

    Quarkus中的依賴注入DI和面向切面aop編程

    這篇文章主要為大家介紹了Quarkus中的依賴注入DI和面向切面aop的編程規(guī)范思想,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • SpringBoot添加SSL證書的方法

    SpringBoot添加SSL證書的方法

    HTTPS 實際上就是 HTTP + SSL,使我們的網(wǎng)站更加安全,地址欄上會有一把小鎖。那么如何在SpringBoot添加SSL證書,下面就一起來了解一下
    2021-05-05
  • SpringBoot、mybatis返回樹結構的數(shù)據(jù)實現(xiàn)

    SpringBoot、mybatis返回樹結構的數(shù)據(jù)實現(xiàn)

    本文主要介紹了SpringBoot、mybatis返回樹結構的數(shù)據(jù)實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04

最新評論