繁体   English   中英

重新排列列表以随机化其在Java中的顺序

[英]Reorder a List to randomize its order in Java

我有一个包含N个元素的列表,我想将其顺序随机化。

优选地,以最少的计算,并且能够用完存储器(将总数复制)。

到目前为止,我已经提出了:

  • 创建一个新的空列表,从原始列表中获取第一个元素,将其插入新列表中的随机位置,数量级似乎为O(N * N),但未使用任何额外的内存。
  • 创建一个新的ArrayList(容量N)(因此访问权限为O(1)),创建一个新的hashSet并插入所有可能的位置(N),获取原始List的第一个元素,并将其插入到新arrayList的随机位置,因为已使用ti,所以从hashSet中删除了该位置。
  • 创建一个新的HashSet,将所有元素添加到此hashSet中,然后遍历该集合以创建一个新的List,并希望hashSet中的顺序是随机的。

在我看来,最便宜的是第三种选择,但我不确定结果的随机性。 有什么建议么?

Collections.shuffle(list); 您正在寻找什么。

随机播放列表的最佳方法是使用标准库方法Collections.shuffle

List lst = getListFromSomewhere();
Collections.shuffle(lst);

如果您想自己做,请阅读Fisher-Yates随机算法

其他人已经提到过shuffle,但是如果您使用的是gwt,则不支持shuffle,您可能必须对其进行编码。 这是一种方法:

public static void shuffleList(final List<String> list) {

    int length = list.size();
    Random random = new Random();

    for (int i = 0; i < length; i++) {

        // Swap index
        int swap = i + random.nextInt(length - i);      

        // Store temporarily
        String temp = list.get(i);

        // Set the values
        list.set(i, list.get(swap));
        list.set(swap, temp);

    }
}

要使用,只需-

shuffleList(listOfStringsToShuffle);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM