Hash是无序的没错,但是谁跟你说是随机的呢?
有顺序一定不是随机的,但是没顺序也不一定就是随机的啊。
你应该去复习一下哈希表。
就知道为什么了。
每个元素的具体位置,是由元素的哈希值决定的。
你每次执行的时候,Set中的元素都是一样的。当然每个元素的哈希值是一样的,产生出来的哈希表也是一样的。这有什么问题吗?
-------------------------补充:
就算运行了也没有疑问啊?我估计你是在疑问为什么每次都是[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]吧。
这是当然了的。Integer的hashCode还是本身啊。所以当然是排序的。
你不能复习一下hash表吗?
你的书的例子有问题,或者是你的书比较老,运行在很古老版本的jdk上,反正现在是不可能出现你上面提到的结果的。
给你一个极端的例子。
你自己定义一个Integer类。
class MyInteger{
private Integer myInt;
public MyInteger(int i) {
myInt = i;
}
public int hashCode() {
return 1;
}
public int value(){
return myInt;
}
public boolean equals(Object obj) {
if(!(obj instanceof MyInteger))return false;
return myInt.equals(((MyInteger)obj).value());
}
public String toString(){
return myInt.toString();
}
}
你看保证跟你插入的顺序是一致的,因为hashCode我定死了是1.
Hash确实是无序的,但是不是随机的啊。
你把Random()后面的参数改为47不就得到书上的序列了
是的 hashmap是乱序输出,是按照Hashcode的排序输出,就是跟你输入的顺序不一样这个意思。