Dan*_* K. 6 java random shuffle
以下程序是否保证在将来的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));
}
}
Run Code Online (Sandbox Code Playgroud)
java.util.Random该类的javadoc 保证,如果在将来的所有Java版本中使用相同的种子进行初始化,它将始终返回相同的随机数.
但对于java.util.Collections.shuffle()效用函数背后的算法有什么保证吗?这个实用程序函数的Javadoc没有说明这一点.
我需要这个保证,因为我想确保持久化数据对于将来的任何Java版本都不会无用.
正如你所说,没有明确的保证.
另一方面,单独存在Collections.shuffle(List,Random)意味着该方法在使用a调用时将始终返回相同的顺序Random在以相同状态.(例如,这对于创建可重复的测试非常有用.)
所以它有点像灰色区域.
但是如果核心功能依赖于它并且您想要绝对确定,那么您可以自己实现Fisher-Yates算法(或者更确切地说,更有效的Durstenfeld算法),这很简单.它非常简单,绝对不值得承担Collections.shuffle()将来会发生变化的(可能很小的)风险.
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |