使用Java自带的Collections.shuffle(list) 最好了。效率也高~

解决方案 »

  1.   

    视情况而定,比如你简单的替换,把第二个对象,换成其他的,肯定是arraylist更快。
    但如果你是修改列表内容结构,比如从列表中间删除一个,那肯定是linkedlist快,
    不过也有特例,删除最后一个元素,arraylist更快。
    插入数据也一样,在中间或者开始插入数据linkedlist快,
    但是如果在末尾插入,就要看具体情况了。
    arraylist容量足够的情况下,arraylist快,否则linkedlist快。
    arraylist的容量是动态扩展的,所以会批量的为将来在最后插入数据提供空间。
      

  2.   

    如果洗牌,LinkedList未必快,而且根据算法,有可能更慢!
    http://bbs.csdn.net/topics/390791738
    因为LinkedList.get方法是出奇的慢的。但是,你这里还有个小bug。完全是因为你碰巧初始化了相同的内容,才没有最终出错list.remove(ran.nextInt(list.size()));对于List<Integer>来说,这个是尤其容易迷惑人的
    你这个调用的是remove(int),是按照索引删除,而不是按照元素删除。你的列表初始化的时候
    for(int index=0;index<num;index++){
    list.add(index  *100);
    }
    你再看看最后返回出来的结果,不是期望的0, 100, 200,而是0,1,2,3的乱序。
      

  3.   

    你自己试过吗?明明是正确的代码。。
    你说的正是我想问你的。
    没试过我会这样说?
    我试了明明是对元素0 100 200...的shuffle,哪里有你说的1 2 3
      

  4.   

    你自己试过吗?明明是正确的代码。。
    你说的正是我想问你的。
    没试过我会这样说?
    我试了明明是对元素0 100 200...的shuffle,哪里有你说的1 2 3
    mind if you read my post again, very very carefully, and never never miss a single word?
      

  5.   

    好吧,我看你说的让你产生了歧义。
    看下面代码吧:
        List<Integer> list = new LinkedList<Integer>(Arrays.asList(1,3,5,7,9));
        System.out.println(list.remove(1)); 
        System.out.println(list.remove(3));
        System.out.println(list);
    写代码的人的本意是想删除元素1,3
    但实际删除的,却是元素3,9
      

  6.   

    谁说的LZ代码的本意是想要删除元素?明明就是删除ran.nextInt(list.size())这个位置上的元素