hashCode()的作用是获取哈希码,也称为散列表

    为什么要有hashCode
    对象加入hashSet时,HashSet会先计算对象的hashCode值来判断对象加入的位置,看该位置是否有值。如果没有、HashSet会假设对象没有重复的数据,但如果发现有值,这是会调用equals()方法来检查是否真的相同,如果两者相同,HashSet 就不会让其加入操作成功,如果不同的话,就会重新散列到其他位置,这样就大大减少equals()的次数,相应就大大提高执行速度。

    原则:

    • 如果两个对象相等,则hashcode 一定也是相同的
    • 两个对象相等,对两个对象分别调用equals()方法都返回true
    • 两个对象有相同的hashCode值,他们也不一定相等
    • 因此,equals()方法被覆盖过.则hashCode()方法也必须被覆盖
    • hashCode()的默认行为是堆上的对象产生独特的值,如果没有重写hashCode(),则该class的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)