在一次采访中,我被要求编写一个方法,该方法每次调用时都会生成唯一的 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 占用的其余空间是内存浪费。有没有一种方法可以在不使用额外内存的情况下实现相同的目标。我的意思是,在每次调用时都可以使用哪个唯一编号,这样就不会浪费这么多内存。