A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨丽静 中级黑马   /  2014-1-5 10:27  /  744 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java中内存泄露问题与hashcode的作用是一个问题吗?下面是我自己的总结我总觉得不全面希望各位大神指点一下
hashcode的作用?
只有类的实例对象要被采用哈希算法进行存储和检索,这个类才需要覆盖hashcode方法。
当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以 直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散 列其它的地址。所以这里存在一个冲突解决的问题。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。
所以,Java对于eqauls方法和hashCode方法是这样规定的:
1、如果两个对象相同,那么它们的hashCode值一定要相同;
2、如果两个对象的hashCode相同,它们并不一定相同
         
         
java中有内存泄露吗?
当一个对被存储进hashset集合中以后就不能修改那些参与计算哈希值的字段了,否则对象修改后的哈希值与最初存储进hashset集合中 时的哈希值就不同了,在这种情况下,即使在contains方法中使用该对象的当前引用作为的参数去hashset集合中检索对象,也将返回找不到对象的结果, 这也会导致无法从hashset集合中单独删除当前对象,从而造成内存泄露。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
hashCode可以复写的 是可以自定义的 后面随便你&上什么
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马