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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yuehaotian 中级黑马   /  2013-12-22 10:42  /  1160 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

张老师视频里描述了JAVA 内存泄露的情况---先将元素存入hashSet集合,再修改元素属性。从而实现集合内元素无法删除

我想问的是

到底是hashCode值改变了,造成的找不到数据?

还是hashCode值没变,而是这个值所在的区间里数据因为改变而不识别了?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 好高端的问题~~

查看全部评分

1 个回复

正序浏览
个人观点:
        我们都知道HashSet集合里的元素是无序的且是不可重复的,
        究其原因是因为我们要存入集合里的对象所继承或自己重新实现的
        hashCode()和equals()方法.只有返回的hashCode相同,才能判断对象相等.
        当我们把一个对象存储到HashSet集合中以后,就不能再修改这个对象的参与计算
        哈希值的字段了,否则对象修改后的哈希值与最初的存储进HashSet集合中的
        哈希值就不同了,所以,当你再次调用方法利用该对象的当前引用去HashSet集合中
        去检索该对象,就会出现对象找不到的结果,同样的原理,如果你调用集合的remove()
        方法去删除当前对象,同样无法从集合中删除,从而造成内存泄露.

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马