map中hashcode和equals如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
HashMap:链表+数组方式实现。
HashMap的存储: 先从通过key的hascode计算出位置,然后存入到链表。
HashMap查找key: hashMap会先根据key值的hashcode经过运算定位其所在数组的位置,再根据key的equals方法匹配相同key值获取对应相应的对象.
也即是说,一个Key的查找是由hashcode和equals方法,共同来决定的。如果只实现equals, 而不实现hashcode。那么必然存着问题。
部分源码:
if (first.hash == hash && // always check first node
((k = first.key) == key || (key != null && key.equals(k))))
return first;
equals 和 hascode是Java对象的两个方法。默认实现是:equals,比较两个对象的内存地址。hashcode,通过对象的内存地址计算出的散列值。 如果两个对象相等,hashcode一定相等。
当对某类equals重写之后,两个对象实例的内存地址不一定相同,而hashcode也不一定相同。 根据hashcode的规则,两个对象相等其hashcode一定相等,所以矛盾就产生了,因此重写equals一定要重写hashcode。
看完上述内容,你们掌握map中hashcode和equals如何使用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。