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

dni*_*vra 0 java

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

Tha*_*wda 6

Java集合具有(出奇)简单的解决此问题: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);
Run Code Online (Sandbox Code Playgroud)

笔记:

额外的优化是危险的。 这不起作用:

    long seed = System.nanoTime();
    Random rnd = new Random(seed);
    Collections.shuffle(quests, rnd);
    Collections.shuffle(answers, rnd);
Run Code Online (Sandbox Code Playgroud)