首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 生成 100 個 1-150 間不重複隨機數

     編輯:Java 相關知識

核心算法:集合去重 + 隨機抽樣


import java.util.*;

public class UniqueRandomNumbers {
    public static int[] generateUnique(int min, int max, int count) {
        if (count > max - min + 1) throw new IllegalArgumentException("數量超過範圍");
        Set<Integer> set = new HashSet<>();
        Random rand = new Random();
        while (set.size() < count) {
            set.add(rand.nextInt(max - min + 1) + min);
        }
        return set.stream().mapToInt(Integer::intValue).toArray();
    }

    public static void main(String[] args) {
        int[] res = generateUnique(1, 150, 100);
        Arrays.sort(res);
        for (int n : res) System.out.println(n);
    }
}

關鍵點解析

  • Random.nextInt(bound) 生成 [0, bound),+min 映射到 [min, max]
  • HashSet 自動去重,size() 達標即停止
  • 期望循環次數 ≈ count / (1 - count/range),此處範圍 150,取 100,效率可接受
  • 若 count 接近 range,建議改用 **洗牌算法**:生成全範圍列表 Collections.shuffle 取前 count 個,O(N) 確定性

洗牌算法版本 (大量抽樣首選)


public static int[] generateByShuffle(int min, int max, int count) {
    List<Integer> pool = new ArrayList<>(max - min + 1);
    for (int i = min; i <= max; i++) pool.add(i);
    Collections.shuffle(pool);
    return pool.subList(0, count).stream().mapToInt(Integer::intValue).toArray();
}

輸出示例

程序輸出 100 個 1-150 間不重複整數,排序後顯示。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved