【问题标题】:how to shuffle two list in the same fashion in java?如何在java中以相同的方式洗牌两个列表?
【发布时间】:2012-04-25 09:00:51
【问题描述】:

我想以相同的方式随机播放两个列表。假设我有两个问题和答案列表。我想以相同的方式对它们进行洗牌,以使问题答案对保持不变。

【问题讨论】:

  • 您有单独列表中的问题和答案?天哪。
  • 为什么不创建一个简单的QA 类来结合问题和答案呢?这样你只需要一个列表。
  • 是的,这是个好主意,我可以使用一个类。

标签: java


【解决方案1】:

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);

【讨论】:

    【解决方案2】:

    您应该将问答对保存在Map&lt;YourQuestionType, YourAnswerType&gt;List&lt;YourQuestionAnswerPair&gt; 中,而不是两个单独的列表。

    对于后者的通用解决方案,this thread 也可能有用。

    【讨论】:

    • 应用程序在服务器上运行的问题,每个学生都应该以随机顺序获得问题。而使用地图的难点在于我无法洗牌。
    • @dnivra,您不能直接对 Map 进行洗牌,但您可以将其所有键的列表提取到单独的列表中并对其进行洗牌。如果您想为每个用户设置不同的顺序,则无论如何都需要浅拷贝您的源集合,无论是 List 还是 Map。因此,使用 Map 实际上更有效,因为您只复制键(问题)的集合,而不是值(答案)。
    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 2021-06-22
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多