黑马程序员技术交流社区

标题: 内存泄露问题 [打印本页]

作者: yuehaotian    时间: 2013-12-22 10:42
标题: 内存泄露问题
张老师视频里描述了JAVA 内存泄露的情况---先将元素存入hashSet集合,再修改元素属性。从而实现集合内元素无法删除

我想问的是

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

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


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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2