黑马程序员——hashCode方法解决内存泄露
2012-03-09 12:24
218 查看
---------------------- android培训、java培训、期待与您交流! ----------------------
hashCode方法与HashSet类
例:
目的:解决内存泄露
public class ReflectPoint{
private int x;
public int y;
public ReflectPoint(int x,int y){
super();
this.x=x;
this.y=y;
//建立Hashcode,重写equals方法:右键-->Source-->Generate hashCode() and equals()
}
}
public class ReflectTest{
public static void main(String[] args){
//父类接口
Collection collections= new ArrayList();// 值:4
//Collection collections= new HashSet();// 值:3 未用Hashcode,重写equals方法
ReflectPoint pt1 = new ReflectPoint(3,3);
ReflectPoint pt2 = new ReflectPoint(5,5);
ReflectPoint pt3 = new ReflectPoint(3,3);
collections.add(pt1);
collections.add(pt2);
collections.add(pt3);
collections.add(pt1);// HashSet集合里有相同的Hashcode值,会替换掉。
System.out.println(pt3.equals(pt1));
//false 比较的是Hashcode值,只有通过hashCode重写equals方法,值才能为 "true",值为:2
System.out.println(collections.size());
}
}
把hash集合里每个对象换算成hash值,通过hash值分成若干个区域,然后比较hash值在哪个区域,对这个区域里hash值,逐个进行比较,判断是否相等。只有规定存储集合是Hash算法这种类型的集合,hashCode值才有价值。
提示:
当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中时的哈希值就不同了,在这种情况下,即使在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果,这也会导致无法从HashSet集合中单独删除当前对象,从而造成内存泄露。
例:
//pt1.y = 7; // 值为:1
pt1.y = 7; // 值为:2 造成内存泄露
collections.remove(pt1);
System.out.println(collections.size());
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
hashCode方法与HashSet类
例:
目的:解决内存泄露
public class ReflectPoint{
private int x;
public int y;
public ReflectPoint(int x,int y){
super();
this.x=x;
this.y=y;
//建立Hashcode,重写equals方法:右键-->Source-->Generate hashCode() and equals()
}
}
public class ReflectTest{
public static void main(String[] args){
//父类接口
Collection collections= new ArrayList();// 值:4
//Collection collections= new HashSet();// 值:3 未用Hashcode,重写equals方法
ReflectPoint pt1 = new ReflectPoint(3,3);
ReflectPoint pt2 = new ReflectPoint(5,5);
ReflectPoint pt3 = new ReflectPoint(3,3);
collections.add(pt1);
collections.add(pt2);
collections.add(pt3);
collections.add(pt1);// HashSet集合里有相同的Hashcode值,会替换掉。
System.out.println(pt3.equals(pt1));
//false 比较的是Hashcode值,只有通过hashCode重写equals方法,值才能为 "true",值为:2
System.out.println(collections.size());
}
}
把hash集合里每个对象换算成hash值,通过hash值分成若干个区域,然后比较hash值在哪个区域,对这个区域里hash值,逐个进行比较,判断是否相等。只有规定存储集合是Hash算法这种类型的集合,hashCode值才有价值。
提示:
当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中时的哈希值就不同了,在这种情况下,即使在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果,这也会导致无法从HashSet集合中单独删除当前对象,从而造成内存泄露。
例:
//pt1.y = 7; // 值为:1
pt1.y = 7; // 值为:2 造成内存泄露
collections.remove(pt1);
System.out.println(collections.size());
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
相关文章推荐
- “内存泄露”问题的分析和解决方法
- cvLoadImage内存泄露问题解决方法
- cvLoadImage()导致内存泄露的解决方法
- 黑马程序员——equals方法和hashCode方法的问题
- iOS7 UIWebView内存泄露问题解决方法
- 黑马程序员_hashcode方法的作用和哈希算法
- 黑马程序员--JAVA基础复习之多线程(二)线程安全与解决方法
- 黑马程序员-如何解决窗口重绘覆盖目标图形的方法
- 【黑马程序员】错误:“未安装全文搜索或无法加载某一全文组件”的解决方法
- Handler 引起的内存泄露之解决方法WeakReference
- WPF WPF中解决内存泄露的几点提示与解决方法
- 解决IE6内存泄露的另类方法
- 黑马程序员-一一道面试题的解决方法
- 内存泄露排查原因及解决方法——内存优化(五)
- Android内存泄露及解决方法总结
- 黑马程序员-解决系统报错“线程间操作无效: 从不是创建控件" txtbox1" 的线程访问它”问题的方法
- ios7-uiwebview内存泄露问题解决方法/
- Android开发中常见的内存泄露案例以及解决方法总结
- iOS7 UIWebView内存泄露问题解决方法
- iOS7 UIWebView内存泄露问题解决方法