关于HashSet添加数据在table表中位置的问题,以及对象的hash值计算是按地址值计算吗的问题
6月10号在Java交流频道请教了一个问题,感谢@库米豪斯巴达锅铲祖师 和@HD Superman 的回复.
这里详细把问题描述一下,希望能够讨论一下.
1. 运行情况
1.1 代码
ja
直接把 HashMap 计算桶位置的代码拿出来看
public class HashSetTest {
public static void main(String[] args) {
int h;
Dog dog1 = new Dog("tom");
System.out.println(((h = dog1.hashCode()) ^ (h >>> 16)) & 15);
Dog dog2 = new Dog("tom");
System.out.println(((h = dog2.hashCode()) ^ (h >>> 16)) & 15);
Dog dog3 = new Dog("tom");
System.out.println(((h = dog3.hashCode()) ^ (h >>> 16)) & 15);
}
}
class Dog {
private String name;
public Dog(String name) {
this.name = name;
}
}
我试了一下,直接跑跟 debug 的结果确实不一样,换不同的 JDK 也会不一样