gpt4 book ai didi

java - java.util.Collections.shuffle 平台依赖吗?

转载 作者:行者123 更新时间:2023-12-04 12:03:35 25 4
gpt4 key购买 nike

我们需要使用种子对 ArrayList 进行洗牌

代码是这样的:

List<String> tempList =  new ArrayList<>()
//code to populdate the tempList
Random rng = new Random(2018);
Collections.shuffle(tempList, rng);

附言我们提供静态随机种子的原因是确保它在改组后始终产生相同的结果。

我们观察到的是,开发机器(Mac)上的混洗结果与我们的构建机器(Linux)上的结果不同

我想知道这个方法本身是否依赖于平台?

JDK详细信息
Mac 开启:
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

Build Machine(我需要更多时间来了解更多详细信息,因为我没有访问权限):
jdk1.8.0_162

最佳答案

据我了解,您是在问这个 Java 程序是否保证打印 bcdea在现有的每个 Java 实现上。

import java.util.Random;
import java.util.ArrayList;
import java.util.Collections;

class Main {
public static void main(String[] args) {
Random rng = new Random(42);
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
Collections.shuffle(list, rng);
for (String s : list) System.out.print(s);
}
};
tio.run says它至少在“OpenJDK 8”和他们称为“JDK”的任何东西之间产生相同的输出。但这是一个非常小而无聊的样本。
The official Oracle docs不放心:

Randomly permute the specified list using the specified source of randomness. All permutations occur with equal likelihood assuming that the source of randomness is fair.

This implementation traverses the list backwards, from the last element up to the second, repeatedly swapping a randomly selected element into the "current position". Elements are randomly selected from the portion of the list that runs from the first element to the current position, inclusive. [Emphasis added.]


也就是说,Oracle 并没有声称每个实现都是这样工作的。他们甚至都懒得记录交换元素是“随机选择”的。
顺便说一句,我是在看到 Collections.shuffle 后才知道你的问题的二手 in U.S. voting system software正是这个假设:无论您使用什么 JDK,它的行为都是可重现的。我同意完全不清楚是否是这种情况。
(顺便说一下,C++ std::shuffle 不是这种情况。在那里,不同的库实现 can and do 对相同的输入给出不同的洗牌。)

关于java - java.util.Collections.shuffle 平台依赖吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51699095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com