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编辑  收藏  举报