关于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并没有被删除!。。。
因为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并没有被删除!。。。
相关文章推荐
- 使用dialog导致内存泄露的问题
- 了解关于Android内存泄露等相关问题的处理方式
- android开发中,可能会导致内存泄露的问题
- 关于DLL工程中存在全局变量可能导致MFC内存泄露误报的原因分析及解决办法
- 关于多态里父类的析构函数造成子类内存泄露的问题
- UIImageView 加入子UIImageView 导致内存泄露的问题
- 关于initWithCoder导致的内存泄露
- android开发中,可能会导致内存泄露的问题
- 关于mysql 修改权限表user字段host导致权限丢失的问题
- 关于DLL工程中存在全局变量可能导致MFC内存泄露误报的原因分析及解决办法
- [Android] 关于WebView的内存泄露问题
- 关于handler内存泄露的问题
- 关于内存泄露问题
- memset函数导致内存泄露的问题
- 关于ACE_Asynch_Acceptor::accept 内存泄露的问题(Windows)
- 关于WebView的内存泄露问题
- java读取excel数据,导致内存泄露的问题
- MFC中onctlcolor函数返回的画刷导致的内存资源泄露问题
- QT中使用槽函数来关闭窗口,导致内存泄露的问题以及解决办法
- 几个关于Java内存泄露方面的问题