您的位置:首页 > 其它

关于hashcode修改导致内存泄露的问题

2011-05-03 06:18 316 查看
当Hashset集合存储对象时,每添加一个元素都会先算出它的hashcode分段存储,也就是说对hashcode有一个映射。

因为Hashset中不能存储重复的对象,所以在添加一个元素时,需要对集合当中的元素进行equals比较,这个时候就会通过它的hashcode来判断这个hashcode所存储的区域是哪一块,然后再进入到那个区域去比较。

所以hashset是无序的。

所以呢,,,,,,如果当某对象已经存入了hashset,接着去修改于他计算hashcode相关的字段的值,此时再去remove这个对象,是删不掉的!如果hashset中存储对象数量过于庞大,也许这也就是造成内存泄露的原因。

Point rp1 = new Point(3,3);
Point rp2 = new Point(5,5);
Point rp3 = new Point(6,6);
HashSet set = new HashSet();
set.add(rp1);
set.add(rp2);
set.add(rp3);

rp2.y = 7;
set.remove(rp2);
System.out.println(set.size());

结果还是3个,rp2并没有被删除!。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: