码迷,mamicode.com
首页 > 其他好文 > 详细

hashCode()和equals()

时间:2019-04-02 12:41:44      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:场景   比较   hashset   object   OLE   必须   调用   内存   判断   

  • 区别、联系
    • public int hashCode():返回一个对象的哈希码值
    • public boolean equals(Object obj):判断两个对象是否相等,即是否指向同一内存地址;重写之后则比较的是两个对象的内容是否相等
    • 如果两个对象互相equals(),则hashCode()也必须相等
    • hashCode()相等的两个对象,不一定equals()
    • hashCode()比较时,只需要生成一个hash值即可,相比于equals()效率高,但hashCode()并不可靠;所以,在比较时,先通过hashCode()进行比较,如果hashCode()都不一样,则无需进行equals()再比较,两个对象肯定不相等;如果hashCode()一样,再调用equals()方法进行比较,二者都相等,则两个对象相等
  • 使用场景
    • hashCode()在哈希表中大量使用,如HashMap、HashSet中;当往哈希表中添加元素时,首先会计算该元素的哈希码,通过tab[i = (n-1) & hash]计算该hash值对应在哈希表中的数组位置,如果该位置的桶为空,则直接插入;如果该位置的桶不为空,则调用equals()方法遍历桶中元素,判断是否有相等的元素,有则不保存,没有则添加至链表末端(即两个对象互相equals(),则hashCode()也必须相等)
  • 重写
    • Object类中的equals()比较的是两个对象的地址值,而不是内容,所以比较两个对象内容时要重写;
    • 重写equals()时总要重写hashCode(),因为如果两个对象互相equals(),则hashCode()也必须相等;

hashCode()和equals()

标签:场景   比较   hashset   object   OLE   必须   调用   内存   判断   

原文地址:https://www.cnblogs.com/jiachao/p/10641613.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!