产生一个 由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;