本帖最后由 ameyume 于 2011-03-27 16:49:25 编辑

解决方案 »

  1.   

    List里添加1到100这100个整数,然后用java.util.Collections.shuffle一下,然后每次remove List中index为0的元素
      

  2.   

    注意使用LinkedList,不要用ArrayList
      

  3.   

    为什么不能是ArrayList??
    ArrayList<Integer> array =new ArrayList<Integer>();
    for (int i = 0; i < 100; i++) {
    array.add(i);

    }
    Collections.shuffle(array);array就是你要的随机数组
      

  4.   


    一样的想法!不过对楼上的那位高人问个问题,为什么不能用ArrayList?
    是它按顺序去找?
      

  5.   

    因为我说每次移除index为0的元素嘛,如果用ArrayList的话,每次将第一个元素移除掉后,后面的元素都要前移,而LinkedList只需改变头元素的指向即可,效率更高。学过数据结构的应该能明白
      

  6.   

    谢谢各位高人,我对java掌握还是太肤浅了。
      

  7.   

    可以试试这个:public class Test {
    public static void main(String[] args) {
    int[] a = new int[100];
    for(int i=0; i<100; i++)
    a[i] = i+1;
    for(int i=99; i>0; i--) {
    int temp = (int)(Math.random()*100)%i;
    int t = a[temp];
    a[temp] = a[i];
    a[i] = t;
    }
    }
    }
      

  8.   

    也就是说3L用ArrayList,在执行shuttle时,因为ArrayList还是数组的形式,效率上没有LinkList高。
      

  9.   

    那就是每次list中index为0的元素作为产生的随机数,放在arr数组中就可以了。
    明白了。谢谢!
      

  10.   

    又是洗牌算法1、创建长度为100的整数数组 int[] a = new int[100]
    2、初始化它们:a[0] = 1, a[1] = 2, a[2] = 3......a[99]=100
    3、得到0~99之间的随机数 b,比如得到 b = 34,并且将 a[b] 和 a[99] 交换
    4、得到0~98之间的随机数 b,比如 b = 29,并且将 a[b] 和 a[98] 交换
    5、得到0~97之间的随机数 b,比如 b = 34,并且将 a[b] 和 a[97] 交换
    ......
    n、得到0~1之间的随机数 b,比如 b = 1,并且将a[b] 和 a[1] 进行交换
      

  11.   


    个人觉得这个效率应该最高,Collections的shuffle差不多也就上面那个思路把
      

  12.   

    用collection肯定会因为方便操作而牺牲效率,而且牺牲非常严重7楼得实现和11楼的思路类似,而且
    int temp = (int)(Math.random()*100)%i;
    这句其实改成
    int temp = (int)(Math.random()*i);就好了