【发布时间】:2013-10-01 01:00:30
【问题描述】:
在一次采访中,我被要求编写一个方法,该方法每次调用时都会生成唯一的 5 位随机数。例如:如果我调用该方法并得到 22222,那么在下一次调用中我不应该得到 22222。
我写了如下代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class RandomNumberGen {
private static ArrayList arr=new ArrayList();
private static int k=-1;
public RandomNumberGen(){
for (int i=10000;i<99999;i++){
arr.add(i);
}
Collections.shuffle(arr);
}
public static void main(String[] args) {
for(int m=0;m<10;m++){
try {
System.out.println(new RandomNumberGen().randomNumbermethod());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public Integer randomNumbermethod() throws Exception{
k++;
if(k>=arr.size()){
throw new Exception("No more number available");
}else return (Integer) arr.get(k);
}
}
答案已被接受,但现在我被要求避免内存浪费。 我的问题在这里,你可以看到我只使用了 10 个数字。所以 arraylist 占用的其余空间是内存浪费。有没有一种方法可以在不使用额外内存的情况下实现同样的事情。 我的意思是,每次调用都可以使用哪个唯一编号,这样就不会浪费这么多内存。
【问题讨论】:
-
如果你只想要 10 个值,你可以保留一个已经选择的值的集合并检查随机值不在其中。对于更多的值,这变得越来越可怕,但 10 就可以了
-
Arraylist 当然可以用于这样的集合,但某种集合(如哈希集)可能会更有效
-
@sp00n 这个问题与唯一性无关
-
@sp00m 我看到了那个帖子,但我的问题与这种方法浪费内存有关
标签: java arrays collections random