无重复随机的方法

这种方法是一个同事想的,个人也觉得确实在此种条件下,不管怎样的随机算法,最终,都不可能有重复的情况.

1.将所有需要随机的数放在一个数组.

2.任何随机算法,如java的Math.random(),随机访问一个index后,从数组中删除这个index

3.重复步骤1,2.最终,在数组size为0后,便打印出了随机的所有值,且一定没有重复的.

example:
import java.lang.System;
import java.util.ArrayList;
import java.util.List;
public class sayhello {

public static void main(String[] args) {
// TODO Auto-generated method stub

List sl = new ArrayList();
for(int i=0;i<10;i++){
sl.add("hello"+i);
}
int slSize = sl.size();
for(int i=0;i int index= (int) (Math.random()*slSize);
System.out.printf("May repeat randrom ArrayList[%d]:%s ",index, sl.get(index));

}
for(int i=0;i int index= (int) (Math.random()*sl.size());
System.out.printf("No repeat randrom ArrayList[%d]:%s ",index, sl.get(index));
sl.remove(index);

}
}
}

运行结果可以对比下:
May repeat randrom ArrayList[9]:hello9
May repeat randrom ArrayList[4]:hello4
May repeat randrom ArrayList[6]:hello6
May repeat randrom ArrayList[9]:hello9
May repeat randrom ArrayList[4]:hello4
May repeat randrom ArrayList[6]:hello6
May repeat randrom ArrayList[3]:hello3
May repeat randrom ArrayList[9]:hello9
May repeat randrom ArrayList[3]:hello3
May repeat randrom ArrayList[9]:hello9
No repeat randrom ArrayList[3]:hello3
No repeat randrom ArrayList[5]:hello6
No repeat randrom ArrayList[6]:hello8
No repeat randrom ArrayList[6]:hello9
No repeat randrom ArrayList[0]:hello0
No repeat randrom ArrayList[0]:hello1
No repeat randrom ArrayList[2]:hello5
No repeat randrom ArrayList[0]:hello2
No repeat randrom ArrayList[0]:hello4
No repeat randrom ArrayList[0]:hello7
| 261个评论