8.7 ArrayList_HasSet 的比较及Hascode分析 和内存泄露
来源:互联网 发布:国产篮球鞋知乎 编辑:程序博客网 时间:2024/06/02 07:06
p { margin-bottom: 0.21cm; }
ArrayList集合和HasSet集合的比较:
ArrayList集合往集合里面装值的时候直接往对象里面装值 不进行判断里面是否有重复的对象
HasSet往对象里面装值的时候 要进行判断是否是同一个对象(判断内存地址是否相等)
Hascode的解释(HasCode只在Has集合中起作用)
HasCode定义在被集合里面的对象里面 作用是 1.根据has算法比较集合中的对象是否相等 他会将不同的对象放在不同的区域里面对象的存储区域是由Has算法加密后而定的这样 就不必一个一个对象的进行比较了 只需比较相同区域内的值 提高了运行效率 2 如果申明的对象相等 那么就不需要重新实例化一个内存空间给它 所以 被有HasCode的对象实例化后当两个对象相等 那么他们使用的是同一个内存地址
有HasCode的对象 往HasSet集合里面放值:
如果申明的对象值和以前声明的对象相同 不会为新实例的对象重新分配内存空间就是和以前申明的对象共用一个内存地址 相当于是同一个对象 所以, 在此种情况下 如果将两个对象同时增加到HasSet集合里面只能增加一个
由HasCode对象往Hasset集合里面增加值后再改变值 将不能对其移除, 引起的内存泄漏
因为HasCode存储地址是由Has对象加密而得来的,而移除是也是需要HasCode加密后再根据加密文件取出 如果将对象存储进去后 修改的对象得到值 那么加密后的数据和原来的数据不一致 导致无法从内存中销毁
HasCode生成方式:source - hasCode and equals
例子:
publicclassReflectTest2 {
publicstaticvoidmain(String[] args) {
Collectioncollections = newHashSet();
ReflectPointp1 = newReflectPoint(1,2);
ReflectPointp2 = newReflectPoint(2,2);
ReflectPointp3 = newReflectPoint(1,2);
ReflectPointp4 = newReflectPoint(3,2);
collections.add(p1);
collections.add(p2);
collections.add(p3);
collections.add(p4);
p1.y=7;
p3.y=9;
collections.remove(p1);
collections.remove(p3);
System.out.println(collections.size());
}
}
- 8.7 ArrayList_HasSet 的比较及Hascode分析 和内存泄露
- ArrayList和HashSet对的比较及HasCode分析
- 关于Android 的内存泄露及分析
- 关于Android 的内存泄露及分析
- 关于Android 的内存泄露及分析
- 了解和分析内存泄露的文章!
- “内存泄露”问题的分析和解决方法
- ArrayList与HashSet的比较,以及HashCode分析, 内存泄露
- Android内存泄露及分析
- Android 内存分析及管理、泄露和调试
- java中equals() 和 hasCode()方法比较
- Java内存泄露和分析
- 关于Android 的内存泄露及分析(转)
- 关于Android 的内存泄露及分析(转)
- 关于Android 的内存泄露及分析(转)
- app内存泄露的原因分析及对策
- Android使用Handler造成内存泄露的分析及解决方法
- Android使用Handler造成内存泄露的分析及解决方法
- Diskeeper 2010 中文破解注册版 强烈推荐!顶级磁盘碎片整理软件
- 8.4 成员变量反射的综合使用实例
- JAVA中的哈希表
- 8.5 成员方法的反射
- 8.6 对接受数组方法的成员方法进行反射
- 8.7 ArrayList_HasSet 的比较及Hascode分析 和内存泄露
- 8.9反射的应用 实现框架的功能
- sort,qsort的一些用法。
- Web开发之一:Web UI技术综述
- 8.10 用类加载器的其他作用
- Empty class and optimization
- 2-最小化往返时间
- Web开发之二:什么是前端、什么是后端
- 9.1 用内省的方式反射JavaBean