gpt4 book ai didi

java - 在 Java 中有效地生成唯一的随机数

转载 作者:行者123 更新时间:2023-11-29 10:00:16 25 4
gpt4 key购买 nike

我想生成 0 到 999,999 范围内的唯一随机数。

为了实现这一目标,我尝试了:

ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 0; i < 999999; i++) {
list.add(new Integer(i)); // Add numbers from 0 - 999,999 into ArrayList
}

Collections.shuffle(list); // shuffle them

for (int i = 0; i < 10; i++) {
System.out.println(list.get(i)); // printed unique numbers
}

问题是我要生成的数字越大,耗时越长,对于上面的方法,大概耗时700ms

但如果我使用 Random() 生成它们而不过滤重复数字,它只需要 2ms

for(int i = 0; i<10; i++) {
int digit = 0 + new Random().nextInt((999999 - 0) + 1);
System.out.println(digit);
}

有没有其他方法可以更有效地生成唯一的随机数?

最佳答案

如果您只需要 10 个,则无需创建 1000000 个数字的列表并将它们全部打乱。也无需编写 new Integer(i)(您可以只使用 ).

在 Java 8 中,有一种非常简单的方法可以做到这一点:

int[] arr = ThreadLocalRandom.current().ints(0, 1000000).distinct().limit(10).toArray();
System.out.println(Arrays.toString(arr));

如果您使用的是 Java 7 或更低版本,您可以这样做:

Random rand = new Random(); // Only do this in Java 6 or below. Now you should use ThreadLocalRandom.current().
int[] arr = new int[10];
Set<Integer> set = new HashSet<Integer>();
for (int index = 0, a; index < 10;)
if (set.add(a = rand.nextInt(1000000)))
arr[index++] = a;
System.out.println(Arrays.toString(arr));

关于java - 在 Java 中有效地生成唯一的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33908199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com