hash

学习需要系统,但是系统的学习是自己完善而得来的。

不依托业务,不切合工作,不实践的学习,都是无效的学习。因此我的博客是这样的:不会专门写XXX系列,而是想到什么或者工作用到什么,就写点什么。

因为,今天下班的时候,从公司走回住的地方,和逗逼同事无聊的聊了很久。所以,今天来写点关于:hash的话题吧。
(就是这么任性,想到什么就写什么。这个因为和所以,没有半毛钱关系。哈哈……)

object 中的 hashcode(),是内存地址的映射(不严谨,但是好记,唯一性)。equals(),比较的是对象的内存地址映射是否相等。

原则:如果两个对象相等,那么两个对象的hashcode也应当相等。因此,重写equals,就必须重写hashcode。

hash相关的Java API,hashMap,hashSet等散列集合内部会建立自己的hash链,该hash链,用于索引对应hash集合,使遍历更加高效。

如果对象的equals相等,而hashcode不相等,那么散列集合在增、删、改元素时,就会出错。

原因为(以删为例子):删除散列集合中的元素,

  1:对元素进行hashcode计算。

  2:用得到的hashcode在散列集合索引链中进行查找(非遍历式,而是匹配式,智能到索引中相近的地方进行对比)

  3:对象的equals相等,而hashcode不相等,那么就无法完成删除动作。造成内存泄漏。

剩余部分,你懂的。

 

欢迎扔砖,指正。谢谢~

 

转载于:https://www.cnblogs.com/chen--biao/p/5392654.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值