黑马程序员技术交流社区
标题:
内存泄露问题
[打印本页]
作者:
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