0

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

4

2 回答 2

6

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);
于 2017-07-01T17:10:42.540 回答
3

您应该将问答对保存在 aMap<YourQuestionType, YourAnswerType>或 a中,而不是两个单独的列表List<YourQuestionAnswerPair>

对于后者的通用解决方案,此线程也可能有用。

于 2012-04-25T09:03:46.330 回答