java - 如何在java中以相同的方式对两个列表进行洗牌?

标签 java

我想以相同的方式洗牌两个列表。假设我有两个列表问题和答案。我想以相同的方式对它们进行洗牌,以便问题答案对保持相同。

最佳答案

Java Collections 对于这个问题有一个(令人惊讶的)简单的解决方案:Collections.shuffle(Collection<?>, Random)Random用相同的种子播种。

    List<Integer> quests = Arrays.asList(1, 2, 3, 4, 5);
    List<Integer> answers = Arrays.asList(10, 20, 30, 40, 50);

    long seed = System.nanoTime();
    Collections.shuffle(quests, new Random(seed));
    Collections.shuffle(answers, new Random(seed));

    System.out.println(quests);
    System.out.println(answers);

注意:

额外的优化是危险的。 这不起作用:

    long seed = System.nanoTime();
    Random rnd = new Random(seed);
    Collections.shuffle(quests, rnd);
    Collections.shuffle(answers, rnd);

关于java - 如何在java中以相同的方式对两个列表进行洗牌?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10312442/

相关文章:

java - 发送邮件时出错

Java:Printf(%.2f,arg) 显示 f$ff 而不是 f.ff。什么可能导致这种情况?

java - Android - 如何让Tor服务使用Socket进行DNS解析?

javascript - 为移动和桌面加载不同的 JS

java - 如何在 Kotlin 中从 Android 应用程序发送文本和图像?

java - 如何列出 s3 存储桶中以特定文件格式结尾的文件?

java - 自定义类的构造函数中的 InvokingTargetException

java - 为什么这个主机名看起来这么奇怪?

java - JSP自定义标签ClassNotFoundException

java - XMPP XEP-0313 Smack Android 获取所有花名册成员的最新消息