最近在做在线考试系统的时候需要随机生成题的顺序,鉴于普通的随机数生成算法需要进行若干次的遍历,于是想了一个不需要遍历的不重复随机数的算法,这个算法效率相对要高一些。
int count=100;//产生随机数的个数
LinkedList list = new LinkedList();
for (int i = 0; i < count; i++) {
list.add(new Integer(i + 1));//将连续整数放入LinkedList
}
Object[] obj = new Object[count];
int j = 0;
while (list.size() > 0) { //从LinkedList中随机位置取出一个数放入数组,并将其从LinkedList中删除
count--;
int k = (int) (Math.random() * count);//每次取的数在LinkedList中的位置都要--
obj[j] = list.get(k);//产生不重复随机数组obj,为Integer的父类
j++;
list.remove(k);//删除已经取出的整数
}
这样,最后生成的obj[]就是一个连续的随机数组了,当然,存储的是对象。