在未来的 java 版本中,以下程序是否保证生成具有相同内容和顺序的列表?
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));
Collections.shuffle(list, new Random(42));
}
}
java.util.Random
类的 javadoc 保证如果在所有 future 的 java 版本中使用相同的种子初始化它将始终返回相同的随机数。
但是 java.util.Collections.shuffle()
实用函数背后的算法是否有任何保证?这个实用函数的 Javadoc 对此没有任何说明。
我需要这种保证,因为我想确保持久化数据不会对 future 的任何 Java 版本无用。
最佳答案
如您所说,没有明确的保证。
另一方面,单独的 Collections.shuffle(List,Random)
的存在表明其意图是当使用 调用时,此方法将始终返回相同的顺序处于相同状态的随机
。 (例如,这对于创建可重复的测试很有用。)
所以这是一个灰色地带。
但是如果核心功能依赖于它并且你想绝对确定,你可以实现 Fisher-Yates algorithm (或者更确切地说,更有效的 Durstenfeld 算法)你自己,这很简单。它非常简单,绝对不值得冒(可能很小的)Collections.shuffle()
将来会发生变化的风险。
关于java - 是否可以保证 java.util.Collections.shuffle() 背后的算法在未来的 Java 版本中保持不变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31720119/