为什么每次运行结果都是一样的,费解,而且还很有规律,一点不像是随机数的样子,有知情人士么,附图代码
Random ran = new Random(System.currentTimeMillis(););
看第19行代码,你生成是随机数在0-29之间,然后运行了10000次,结果放在HashSet里,最后结果肯定是0......29啊
你将HashSet修改成ArrayList看看。顺序肯定不一样。
另外楼上的2个答案,Random默认的构造子是System.nanoTime()
因为 你用的是HashSet,HashSet是无序的,并不会按照你存储的顺序来保存。你可以换LinkedHashSet试试。
例如下边的代码,输出是:[1, 2, 4, 5]
public static void main(String[] args) {
Set<Integer> s = new HashSet<Integer>();
s.add(5);
s.add(4);
s.add(1);
s.add(2);
System.out.println(s);
}
你可以试试改变随机数种子
//hashSet的是Integer,其hashCode()实现就返回int值本身。所以在对象hashCode这一步引入了巧合的“按大小排序”。然后HashMap.hash(Object)获取了对象的hashCode()之后会尝试进一步混淆。JDK8版java.util.HashMap内的hash算法比JDK7版的混淆程度低;在[0, 2^32-1]范围内经过HashMap.hash()之后还是得到自己
//所有此处加入2的16次方作为混淆,后续遍历获取时都必须减去此混淆值 即可
所以你如果用hashset ,是会自动排序的,除非用 LinkedHashSet 或者 在hashset中设置混淆值。
Random ran = new Random(System.currentTimeMillis());