当前位置:  开发笔记 > 编程语言 > 正文

具有固定Random的随机播放列表不会返回相同的结果

如何解决《具有固定Random的随机播放列表不会返回相同的结果》经验,为你挑选了1个好方法。

我有一种方法,在某些时候洗牌List.重要的是我以后可以重现这个改组.为了实现这一点,我传递Random给后来传递给的方法Collection.shuffle(List, Random).我期望使用相同的Random和相同的列表将导致相同的混洗列表,但显然我遗漏了一些东西.

使用Strings代替我的对象的示例代码:

    @Test
    public final void shuffleTest() {
        Random random = new Random(555);

        List text = new ArrayList<>();
        text.add("one");
        text.add("two");
        text.add("three");
        text.add("four");

        List shuffled = shuffleList(new ArrayList<>(text), random);
        List shuffled2 = shuffleList(new ArrayList<>(text), random);
        Assertions.assertThat(shuffled).isEqualTo(shuffled2);
    }

    private List shuffleList(List text, Random random) {
        Collections.shuffle(text, random);
        return text;
    }

我确实注意到,如果不是通过它Random,我会传递种子,并且new Random(seed)每次它确实有效,但我想避免这种情况.



1> Andy Turner..:

如果你这样做:

List shuffled = shuffleList(new ArrayList<>(text), new Random(555));
List shuffled2 = shuffleList(new ArrayList<>(text), new Random(555));

他们确实是平等的.

但是,您使用相同的随机实例两次:在第一次shuffle之后,Random它处于与之前不同的状态,因此它将以不同方式对列表进行洗牌.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有