我想以相同的方式洗牌两个列表。假设我有两个问题和答案列表。我想以相同的方式对它们进行洗牌,以使问题答案对保持不变。
问问题
1100 次
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 回答