自己的Shuffle方法在Java中不起作用

时间:2014-05-05 20:18:54

标签: java shuffle

我已经创建了简单的随机播放方法,但似乎还有一个我无法找到的问题。

以下是我的代码:

public static <E> void shuffle(List<? extends E> list) {
    List<E> temp = new ArrayList<>();

    while (list.size() != 0) {
        E val = list.remove((int) (Math.random() * list.size()));
        temp.add(val);
        System.out.println(val);
    }
    System.out.println(temp);

    list = temp;
}

这是测试用例:

ArrayList<Integer> arr = new ArrayList<>();
    arr.add(1);
    arr.add(2);
    arr.add(3);
    arr.add(4);
    arr.add(5);
    arr.add(6);
    System.out.println(arr);

    shuffle(arr);

    System.out.println("-->" + arr);

问题是上次打印输出方法显示arr为空 - &gt; []它应该是那样的[4,3,1,2,6,5]
问题可能是这一行,但我不明白为什么?

 --> list = temp;

3 个答案:

答案 0 :(得分:2)

是的,就是这一行:

list = temp;

所有这一切都是将temp引用复制到list引用。现在,listtemp都引用了temp最初引用的本地列表。

您需要将temp的内容添加回list

list.addAll(temp);

答案 1 :(得分:2)

list = temp只是将一个新值(temp的内容)分配给名为list的局部变量 - 它不会更改list最初指向的对象。

如果您想要实现此类功能,您只需将temp中的所有项目重新添加到listwhile循环结束后,您就知道了这一点&#39;空的):

list.addAll(temp);

答案 2 :(得分:1)

shuffle方法接收列表引用的副本。当您执行list = temp;时,您告诉该引用指向temp

所以你基本上清空了传递给方法的列表,然后你就失去了对它的访问权。