hashcode与hashset equal,java中的内存泄漏
可以用一个案例来说明这几个问题:
说明:hashset里的值是不可重复,也就是equal的不能相等, hash算法:把hash集合中的元素按它们的hashcode分成若干个区域,后面再有元素就直接比较他们的hashcode,如果相同就可以放在同一个区域中。。。这样有利程序的运行速度。
ReflectTest p1=new ReflectTest(3, 6);//hashcode的值
ReflectTest p2=new ReflectTest(4, 7);
ReflectTest p3=new ReflectTest(3, 6);//hashcode的值,一般是如果两个对象的equal方法相等的话,那么最好重写它们的hashcode equal方法,因为有利程序的健状。
Collection<ReflectTest> con=new HashSet<ReflectTest>();
con.add(p1);
con.add(p2);
con.add(p3);
con.add(p1);
p1.setX(100);------这个操作可以改变p1的hashcode值,这样就导致内存泄漏了。因为后面的remove是没有办法把它移除掉的,所有一般hashset元素一但确认后最好不要修改,这样会导致内存泄漏。。。。。。。。。。。当然也只有hash才有hash,像arraylst不存在hashcode值。
con.remove(p1);
System.out.println(con.size());
posted on 2013-04-30 17:36 peter.peng 阅读(200) 评论(0) 编辑 收藏 举报