产生一个 由0到99之间的数组成,元素各不相同的无序的一个长度为100的数组。
其实换句话说,就是把一个 由0到100之间的一个 连续的数组给打散。
由三种方式。
一:使用List 和随机数
// long s1 = System.currentTimeMillis();
// List ar = new ArrayList();
// for (int i = 0; i < 100000; i++) {
// ar.add(i);
// }
// int [] toArray = new int[100000];
//
// for(int j = 100000; j >0; j--){
// double d = (Math.random()*j);
// int index = (int)d;
// toArray[j-1]= (int)ar.get(index);
// ar.remove(ar.get(index));
// }
// long s2 = System.currentTimeMillis();
// System.out.println("S2-S1用时:"+(s2 - s1)); //S2-S1:14881
二.通过对原来数组元素位置的交换,而不是把原来集合中的元素移除,来产生无序数组
long s1 = System.currentTimeMillis();
int [] ar = new int[100];
for (int i = 0; i < 100; i++) {
ar[i]=i;
}
int [] toArray = new int[100];
for(int j = 100; j >0; j--){
int index = (int)(Math.random()*j);
toArray[j-1]= ar[index];
int temp = ar[index];
ar[index] = ar[j-1];
ar[j-1] = temp;
}
long s2 = System.currentTimeMillis();
System.out.println("S2-S1:"+(s2 - s1));
三: 给原来数组的每个元素定义一个开关, 通过开关判断元素是否重复,如果重复 会继续产生随机数,知道不重复为止
long s1 = System.currentTimeMillis();
//计数器 标记这个方法一共循环多少次
int c = 0;
//这是0-99个数
int[] iqs = new int[100000];
for (int i = 0; i < 100000; i++) {
iqs[i] = i;
}
//这是随机数组
int[] sb = new int[100000];
//设置开关
boolean[] b = new boolean[100000];
//赋值
for (int i = 0; i < 100000; i++) { // 遍历iqs数组
int index;
do {
c++;
index = (int) (Math.random() * iqs.length); // iqs数组的随机下标
} while (b[index] == true); // b[index]为true代码生成过对应字符,则重新生成下标
sb[i] = iqs[index]; // 取出iqs中的元素赋值给sb中的每一个元素
b[index] = true; // true代表已生成过
}
System.out.println(c);
long s2 = System.currentTimeMillis();
System.out.println(s2 - s1);
return sb;
转载于:https://blog.51cto.com/1027187712/1628020