亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java 中實現隨機無重復數字的方法

2019-11-26 16:13:55
字體:
來源:轉載
供稿:網友

一般有點開發經驗的朋友都能實現這樣的功能,只不過是效率上的問題。我們一般在面對這樣的問題時,總會平鋪直序的聯想到,先生成一個數組,然后在一個循環中向數組中添加隨機數字,在添加數字的過程中先查找一下數組中是否存在這個數字,如果不存在這個數字就直接添加到數組中;如果存在這個數字就不添 加。我們一般都是這樣考慮問題的,這樣考慮也能實現功能,我剛才也說了,只不過是效率上的問題。

為了更好地理解這個題意,我們先來看下具體內容:生成一個1-100 的隨機數組,但數組中的數字不能重復,即位置是隨機的,但數組元素不能重復。在這里,沒有給我們規定數組的長度,我們可以讓它是1-100之間的任意長度。

接下來讓我們看一下如何更好地實現它,通常我們會使用 ArrayList 來實現,如下面代碼所示:

復制代碼 代碼如下:

package cn.sunzn.randomnumber;

import java.util.ArrayList;
import java.util.Random;

public class Demo {
   public static void main(String[] args) {
       Object[] values = new Object[20];
       Random random = new Random();
       ArrayList<Integer> list = new ArrayList<Integer>();

       for (int i = 0; i < values.length; i++) {
           int number = random.nextInt(100) + 1;
           if (!list.contains(number)) {
               list.add(number);
           }
       }

       values = list.toArray();

       /********** 遍歷數組并打印數據 **********/
       for (int i = 0; i < values.length; i++) {
           System.out.print(values[i] + "/t");
           if ((i + 1) % 10 == 0) {
               System.out.println("/n");
           }
       }
   }
}

上面這個實現過程效率比較低的。因為在每次添加時都要去遍歷一下當前列表中是否存在這個數字,時間復雜度是 O(N^2)。我們可以這樣思考一下:既然涉及到無重復,我們可以想一下 HashSet 和 HashMap 的功能。HashSet 實現 Set 接口,Set 在數學上的定義就是無重復,無次序的集合。而 HashMap 實現 Map,也是不允許重復的 Key。這樣我們可以使用 HashMap 或 HashSet 來實現。

在使用 HashMap 實現時,只需要將它的 key 轉化成數組就可以了,代碼如下:

復制代碼 代碼如下:

package cn.sunzn.randomnumber;

import java.util.HashMap;
import java.util.Random;

public class Demo {
   public static void main(String[] args) {
       Object[] values = new Object[20];

       Random random = new Random();
       HashMap<Object, Object> hashMap = new HashMap<Object, Object>();

       /******* 生成隨機數字并存入 HashMap *******/
       for (int i = 0; i < values.length; i++) {
           int number = random.nextInt(100) + 1;
           hashMap.put(number, i);
       }

       /********** 從 HashMap 導入數組 **********/
       values = hashMap.keySet().toArray();

       /*********** 遍歷數組并打印數據 ***********/
       for (int i = 0; i < values.length; i++) {
           System.out.print(values[i] + "/t");
           if ((i + 1) % 10 == 0) {
               System.out.println("/n");
           }
       }
   }
}

由于 HashSet 和 HashMap 的關系太近了,HashSet 在底層就是用 HashMap 來實現的,只不過沒有 Value 的集合,只有一個 Key 的集合,所以也可使用 HashSet 來實現,代碼如下:

復制代碼 代碼如下:

package cn.sunzn.randomnumber;

import java.util.HashSet;
import java.util.Random;

public class Demo {
   public static void main(String[] args) {
       Random random = new Random();
       Object[] values = new Object[20];
       HashSet<Integer> hashSet = new HashSet<Integer>();

       /******* 生成隨機數字并存入 HashSet *******/
       for (int i = 0; i < values.length; i++) {
           int number = random.nextInt(100) + 1;
           hashSet.add(number);
       }

       values = hashSet.toArray();

       /*********** 遍歷數組并打印數據 **********/
       for (int i = 0; i < values.length; i++) {
           System.out.print(values[i] + "/t");
           if ((i + 1) % 10 == 0) {
               System.out.println("/n");
           }
       }
   }
}


這樣實現效率稍微好些。如果給我們限定了數組的長度,只需要變換下 for 循環,設置成 whlie 循環就可以了。如下所示:

復制代碼 代碼如下:

package cn.sunzn.randomnumber;

import java.util.HashSet;
import java.util.Random;

public class Demo {
   public static void main(String[] args) {
       Random random = new Random();
       Object[] values = new Object[20];
       HashSet<Integer> hashSet = new HashSet<Integer>();

       /****** 生成隨機數字并存入 HashSet ******/
       while (hashSet.size() < values.length) {
           hashSet.add(random.nextInt(100) + 1);
       }

       values = hashSet.toArray();

       /********** 遍歷數組并打印數據 **********/
       for (int i = 0; i < values.length; i++) {
           System.out.print(values[i] + "/t");
           if ((i + 1) % 10 == 0) {
               System.out.println("/n");
           }
       }
   }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
51午夜精品视频| 日韩在线播放av| 国产精品一区二区电影| 亚洲一区二区久久久| 欧美麻豆久久久久久中文| 欧美极品美女视频网站在线观看免费| 日韩hd视频在线观看| 亚洲欧洲成视频免费观看| 欧美在线视频网站| 国产精品电影一区| 亚洲综合视频1区| 欧美午夜宅男影院在线观看| 国产精品久久久久久久久久新婚| 国产自摸综合网| 国产精品一区二区久久久久| 日韩成人久久久| 国产99久久精品一区二区| 日韩在线观看成人| 91在线中文字幕| 久久伊人色综合| 国产精品白丝av嫩草影院| 欧美亚洲国产另类| 国产精品日韩精品| 国内精品400部情侣激情| 亚洲色图18p| 亚洲图片制服诱惑| 亚洲男人av在线| 欧美大片免费观看在线观看网站推荐| 中文字幕久热精品视频在线| 成人免费视频在线观看超级碰| 日韩精品在线观看一区| 懂色aⅴ精品一区二区三区蜜月| 久久久久久久成人| 两个人的视频www国产精品| 久久亚洲精品毛片| 国产欧美亚洲视频| 综合国产在线视频| 成人啪啪免费看| 成人午夜一级二级三级| 久久综合电影一区| 亚洲国产高清福利视频| 亚洲精品国偷自产在线99热| 亚洲在线第一页| 国产精品视频色| 亚洲国产日韩一区| 秋霞av国产精品一区| 日韩精品在线视频观看| 欧美高跟鞋交xxxxhd| 亚洲一区二区三区视频播放| 欧洲中文字幕国产精品| 欧美成人激情在线| 日韩成人免费视频| 欧美华人在线视频| 日韩少妇与小伙激情| 97超级碰碰碰| 久久久久久中文字幕| 久久综合久中文字幕青草| 国产免费观看久久黄| 国产成人av在线播放| 红桃视频成人在线观看| 97国产一区二区精品久久呦| 亚洲第一视频在线观看| 久久久久久网站| 亚洲专区国产精品| 日韩免费在线免费观看| 国产欧美在线播放| 伦伦影院午夜日韩欧美限制| 中文字幕欧美专区| 亚洲精品电影在线| 精品美女永久免费视频| 国产精品一区二区av影院萌芽| 性欧美在线看片a免费观看| 久久久久国产精品一区| 中文字幕亚洲无线码在线一区| 国产亚洲欧美日韩精品| 欧美小视频在线| 成人黄色影片在线| 成人在线精品视频| 国内精久久久久久久久久人| 日韩欧美福利视频| 国产精品69精品一区二区三区| 欧美电影免费观看电视剧大全| 国产精品丝袜一区二区三区| 国精产品一区一区三区有限在线| 欧洲亚洲在线视频| 亚州欧美日韩中文视频| 欧美在线观看一区二区三区| 91精品国产自产在线老师啪| 欧美在线性视频| 亚洲国产美女久久久久| 欧美日本国产在线| 国内精品美女av在线播放| 在线丨暗呦小u女国产精品| 精品女厕一区二区三区| 亚洲成人av片在线观看| 国产精品狠色婷| 国产精品国产三级国产aⅴ浪潮| 国产一区二区久久精品| 日韩免费高清在线观看| 亚洲激情在线观看视频免费| 亚洲欧美另类国产| 国产精品综合不卡av| 亚洲人成在线观看| 亚洲国模精品私拍| 操日韩av在线电影| 久久午夜a级毛片| 日韩欧美国产中文字幕| 中文字幕在线视频日韩| 亚洲缚视频在线观看| 欧美日韩国产一中文字不卡| 亚洲国产精品一区二区三区| 原创国产精品91| 久久色在线播放| 日韩最新免费不卡| 国产成人亚洲综合91精品| 亚洲a成v人在线观看| 亚洲欧美日韩天堂一区二区| 欧美精品在线免费播放| 日韩av在线看| 色偷偷噜噜噜亚洲男人的天堂| 国产精品激情av电影在线观看| 欧美成人亚洲成人日韩成人| 亚洲精品资源美女情侣酒店| 高清欧美性猛交xxxx| 热99在线视频| 欧美日韩国内自拍| 国产精品视频免费观看www| 久久男人资源视频| 亚洲永久免费观看| 亚洲自拍偷拍在线| 亚洲自拍av在线| 欧美专区中文字幕| 欧美日韩性视频在线| 亚洲色图国产精品| 欧美性猛交xxxx偷拍洗澡| 国产精品99久久久久久白浆小说| 97**国产露脸精品国产| 国产一区二区三区网站| 久久久久亚洲精品成人网小说| 国产精品va在线播放我和闺蜜| 日韩欧美在线免费观看| 97在线日本国产| 成人夜晚看av| 久久69精品久久久久久久电影好| 亚洲va久久久噜噜噜久久天堂| 欧美在线亚洲在线| 91久久精品美女高潮| 久久精品人人做人人爽| 91久久国产综合久久91精品网站| 国产精品999| 欧美精品一区三区| 亚洲激情视频在线| 国产国语videosex另类| 亚洲图中文字幕| 欧美劲爆第一页| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美精品成人在线| 亚洲成人精品在线| 蜜臀久久99精品久久久久久宅男| yellow中文字幕久久| 精品久久久久久久久久久久久| 亚洲人成亚洲人成在线观看| 7m第一福利500精品视频| 欧美日韩国产一区在线|