我想在我的代码中添加一些随机行为。我想使用时间戳值。通过这种方式,我想用当前时间戳对列表进行混洗。这是我的代码:
Random random = new Random(SimClock.getIntTime());
Collections.shuffle(list, random);
如果我不使用随机变量来随机播放列表,则随机播放可以正常工作。但是,当我使用上面列表中的代码时,输出列表始终是相同的(从不乱序)。
随机值每次调用Collections.shuffle时都会更改(我检查了它),所以我不知道为什么当我使用随机值时不对我的列表进行混洗。为什么会这样?
更新
列表是一个具有以下值的ArrayList:[MIX0,MIX1]。
这是在同一执行中三次调用shuffle时列表的值和随机var的值:
randon value: 25214903885
List value before shuffle: [MIX0, MIX1]
List value after shuffle: [MIX0, MIX1]
randon value: 25214903895
List value before shuffle: [MIX0, MIX1]
List value after shuffle: [MIX0, MIX1]
randon value: 25214903865
List value before shuffle: [MIX0, MIX1]
List value after shuffle: [MIX0, MIX1]
随机值是从Eclipse Variables值中复制的。
当我使用不带随机值的随机播放方法时,列表有时会通过这种方式随机播放:[MIX1,MIX0]。
我使用了以下代码:
public static void main(String[] args) throws IOException {
List<String> arr = new ArrayList<>(3);
arr.add("aaa");
arr.add("bbb");
arr.add("ccc");
for (int i = 0; i < 4; i++) {
Collections.shuffle(arr, new Random(System.currentTimeMillis()));
System.out.println(ArrayUtils.toString(arr));
}
}
out:[ccc,aaa,bbb][bbb,ccc,aaa][aaa,bbb,ccc][ccc,aaa,bbb]
当在new Random(...)
的参数中输入常数时,所有输出将相同。