我们需要使用种子来打乱一个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)
构建机(我需要更多时间找到更多详细信息,因为我没有访问权限):
jdk1.8.0_162
Random
对象本身呢?尝试使用nextInt
生成一些数字,看看序列是否也不同。 - ZabuzardRandom
是否也生成了不同的序列。如果是,则是洗牌算法的问题。文档明确指出,所有Random
的实现必须产生相同的序列。如果没有,则该实现不符合文档要求。 - Zabuzard