杰瑞科技汇

Java如何随机生成10个不重复数字?

Java随机生成10个不重复的数字

在Java中,有几种方法可以生成10个不重复的随机数字,以下是几种常见的实现方式:

Java如何随机生成10个不重复数字?-图1
(图片来源网络,侵删)

方法1:使用HashSet(适用于范围较大的数字)

import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class UniqueRandomNumbers {
    public static void main(String[] args) {
        Set<Integer> uniqueNumbers = new HashSet<>();
        Random random = new Random();
        // 假设我们要生成1-100范围内的不重复随机数
        int min = 1;
        int max = 100;
        while (uniqueNumbers.size() < 10) {
            int randomNumber = random.nextInt(max - min + 1) + min;
            uniqueNumbers.add(randomNumber);
        }
        System.out.println("10个不重复的随机数: " + uniqueNumbers);
    }
}

方法2:使用数组交换法(适用于范围与数量相近的情况)

import java.util.Arrays;
import java.util.Random;
public class UniqueRandomNumbers {
    public static void main(String[] args) {
        int count = 10;
        int max = 100; // 最大值
        int[] numbers = new int[max];
        // 初始化数组
        for (int i = 0; i < max; i++) {
            numbers[i] = i + 1; // 生成1-100的序列
        }
        Random random = new Random();
        // 随机交换位置
        for (int i = 0; i < count; i++) {
            int randomIndex = random.nextInt(max);
            int temp = numbers[i];
            numbers[i] = numbers[randomIndex];
            numbers[randomIndex] = temp;
        }
        // 取前count个元素
        int[] result = Arrays.copyOf(numbers, count);
        System.out.println("10个不重复的随机数: " + Arrays.toString(result));
    }
}

方法3:使用Java 8的Stream API(Java 8及以上)

import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class UniqueRandomNumbers {
    public static void main(String[] args) {
        int count = 10;
        int max = 100;
        int min = 1;
        Random random = new Random();
        var uniqueNumbers = random.ints(min, max + 1)
                .distinct()
                .limit(count)
                .boxed()
                .collect(Collectors.toList());
        System.out.println("10个不重复的随机数: " + uniqueNumbers);
    }
}

方法4:使用ThreadLocalRandom(Java 7及以上)

import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ThreadLocalRandom;
public class UniqueRandomNumbers {
    public static void main(String[] args) {
        Set<Integer> uniqueNumbers = new HashSet<>();
        int min = 1;
        int max = 100;
        while (uniqueNumbers.size() < 10) {
            int randomNumber = ThreadLocalRandom.current().nextInt(min, max + 1);
            uniqueNumbers.add(randomNumber);
        }
        System.out.println("10个不重复的随机数: " + uniqueNumbers);
    }
}

注意事项

  1. 如果要生成的随机数数量接近随机数范围的上限(比如要生成95个不重复的1-100的随机数),方法1和方法3的效率会降低,因为需要多次尝试才能找到不重复的数字,这时方法2更高效。

  2. 对于非常大的范围(如1到Integer.MAX_VALUE),方法2不适用,因为需要创建一个大数组。

  3. 所有方法生成的随机数都是伪随机的,如果需要加密安全的随机数,应使用SecureRandom类替代RandomThreadLocalRandom

选择哪种方法取决于你的具体需求和性能考虑。

Java如何随机生成10个不重复数字?-图2
(图片来源网络,侵删)
Java如何随机生成10个不重复数字?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇