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

时间:2012-04-25 09:00:51

标签: java

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

2 个答案:

答案 0 :(得分:4)

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

注意:

额外优化很危险。 此DOE无效:

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

答案 1 :(得分:3)

您应该将问答配对保留在Map<YourQuestionType, YourAnswerType>List<YourQuestionAnswerPair>中,而不是两个单独的列表。

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

相关问题