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

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

Java Collections有一个(令人惊讶的)简单的解决方案来解决这个问题: Collections.shuffle(Collection, Random) ,其中Random使用相同的种子播种。

  List quests = Arrays.asList(1, 2, 3, 4, 5); List 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); 

您应该在MapList保留您的问答配对,而不是两个单独的列表。

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