一、從Random生成不重複的隨機數
Java中的java.util.Random可以生成隨機數,但是它並不能保證所生成的隨機數是不重複的,因為它只是根據種子數生成隨機數。如果我們需要生成不重複的隨機數,可以採用以下方法:
Random random = new Random(); Set<Integer> set = new HashSet<>(); for (int i = 0; i < n; i++) { int x = random.nextInt(n * 10); while (set.contains(x)) { x = random.nextInt(n * 10); } set.add(x); }
這裡使用了Set來存儲生成的隨機數,如果生成的隨機數已經存在於Set中,就繼續生成,直到生成的隨機數不重複為止。
二、不重複隨機數生成器
我們也可以自己實現一個不重複隨機數生成器。具體實現方法為,將所有可能的數存入一個List中,然後隨機取出一個數,並將該數從List中刪除。這樣可以保證所生成的隨機數不重複。
List<Integer> list = new ArrayList<>(); for (int i = 0; i < n; i++) { list.add(i); } Collections.shuffle(list); for (int i = 0; i < n; i++) { int x = list.get(i); }
三、Oracle生成隨機數字不重複選取
Oracle提供了DBMS_RANDOM包,可以用它來生成一個指定範圍內的隨機數,而且可以保證所生成的隨機數不重複。
CREATE TABLE random_table ( id NUMBER(10) PRIMARY KEY, value NUMBER(10) ); DECLARE n NUMBER(10) := 1000; BEGIN FOR i IN 1 .. n LOOP INSERT INTO random_table(id, value) VALUES(i, DBMS_RANDOM.VALUE(1, n)); END LOOP; END; / SELECT * FROM ( SELECT * FROM random_table ORDER BY value ) WHERE rownum <= 100;
這裡我們先創建一個包含指定個數的數據表random_table,並給每一行生成一個隨機數,然後再從中選取指定個數的隨機數。由於DBMS_RANDOM.VALUE函數生成的隨機數都不同,因此可以保證所選取的隨機數不重複。
四、總結
Java生成不重複的隨機數可以通過隨機生成後去重、自己實現不重複隨機數生成器、Oracle中的DBMS_RANDOM包等多種方式實現。具體要根據實際需求來選擇合適的方法。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/242390.html