我想以同样的方式洗牌两个名单。假设我有两个列表问题和答案。我想以同样的方式对它们进行洗牌,以便问题答案对保持不变。
答案 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也可能有用。