HashMap中 hashcode()方法和equels()方法重写问题

来源:互联网 发布:java代码漏洞扫描工具 编辑:程序博客网 时间:2024/05/20 18:53

HashMap是基于散列函数,以数组和链表的方式实现的。 而对于每一个对象,通过其hashCode()方法可为其生成一个整形值(散列码),该整型值被处理后,将 会作为数组下标,存放该对象所对应的Entry存放该 对象及其对应值)。

equals()方法则是在HashMap中插入值或查询时会 使用到。当HashMap中插入 值或查询值对应的散列码与数组中的散列码相等时,则会通过equals方法比较 key值是否相等,所以想以自建对象作为HashMap的 key,必须重写该对象继承object的hashCode和equals 方法。

       HashMap中,如果要比较key是否相等,要同时使 用这两个函数!因为自定义的类的hashcode()方法继承 于Object类,其hashcode码为默认的内存地址,这样 即便有相同含义的两个对象,比较也是不相等的,例 如,生成了两个“羊”对象,正常理解这两个对象应该是相等的,但如果你不重写 hashcode()方法的话,比较是不相等的! HashMap中的比较key是这样的,先求出key的 hashcode(),比较其值是否相等,若相等再比较equals(),若相等则认为他们是相等 的。若equals()不相等则认为他们不相等。如果只重写hashcode()不重写equals()方 法,当比较equals()时只是看他们是否为 同一对象(即 进行内存地址的比较),所以必定要两个方法一起重写。 HashMap用来判断key是否相等的方法,其实是调用了 HashSet判断加入元素是否相等。

0 0
原创粉丝点击