• 为什么java中的对象类中重写equals方法一定还要重写hashcode方法


    首先默认对象继承object,object中equals比较的是对象的内存地址信息,hashcode比较的是对象的内存地址经过hash计算后的hash值。如过是我们需要判断两个对象的内存是否相等的时候,一般不涉及hash类型集合时不用重写hashcode方法,equals就够了,但是涉及到HashMap、HashSet和Hashtable 的时候为了提高存储查询效率会用到hashcode方法,这个时候如果hashcode不重写就会违反我们关于hashcode的约定。

    以下是关于hashcode的一些规定:

    两个对象相等,hashcode一定相等

    两个对象不等,hashcode不一定不等

    hashcode相等,两个对象不一定相等

    hashcode不等,两个对象一定不等

    覆盖equals时总要覆盖hashCode 的原因:
      一个很常见的错误根源在于没有覆盖hashCode方法。在每个覆盖了equals方法的类中,也必须覆盖hashCode方法。如果不这样做的话,就会违反Object.hashCode的通用约定,从而导致该类无法结合所有基于散列的集合一起正常运作,这样的集合包括HashMap、HashSet和Hashtable。

    比如将两个对象存入HashSet里面:如果不重写hashCode,还用原来的hashCode就可能判断两个对象的hashCode不相等(其实重写hashCode再判断这两个对象才发现这两个对象的hashCode是相等的),然后因为判断这两个对象的hashCode不相等就会直接将这两个对象存入HashSet,这就导致了实际上存入了这两个相同的对象。
    ————————————————
    转自:https://blog.csdn.net/yrsg666/java/article/details/93621124

    诸位正值青春年少,一定恣情放纵,贪恋香艳梅施之情,喜欢风流雅韵之事,洒脱木拘。然而诸位可知,草上露一碰即落,竹上霜一触即溶,此种风情难于长久。
  • 相关阅读:
    在scrapy的spiders文件中设置请求时间间隔
    Python中map和reduce函数
    正则表达式
    eslint下的rules一些规则(转:备用)
    谷歌云设置xshell登录
    (过期)活动赠送的国外云服务器VPS【速度极慢,适合小白练手】
    关于服务器的那些事~~~
    call()和appy()的区别及常用场景
    javascript中使用this关键字的大总结
    懵懵懂懂、迷迷糊糊
  • 原文地址:https://www.cnblogs.com/shilipojianshen/p/13023201.html
Copyright © 2020-2023  润新知