http://c610367182.iteye.com/blog/1930676
以 Java.lang.Object 来理解,JVM 每 new 一个 Object, 它都会将这个 Object 丢到一个 Hash 哈希表中去,这样的话,下次做 Object 的比较或者取这个对象的时候,它会根据对象的 hashcode 再从 Hash 表中取这个对象。这样做的目的是提高取对象的效率。具体过程是这样:
new Object(),JVM 根据这个对象的 Hashcode 值,放入到对应的 Hash 表对应的 Key 上,如果不同的对象确产生了相同的 hash 值,也就是发生了 Hash key 相同导致冲突的情况,那么就在这个 Hash key 的地方产生一个链表,将所有产生相同 hashcode 的对象放到这个单链表上去,串在一起。
比较两个对象的时候,首先根据他们的 hashcode 去 hash 表中找他的对象,当两个对象的 hashcode 相同,那么就是说他们这两个对象放在 Hash 表中的同一个 key 上,那么他们一定在这个 key 上的链表上。那么此时就只能根据 Object 的 equal 方法来比较这个对象是否 equal。当两个对象的 hashcode 不同的话,肯定他们不能 equal.