黑马程序员技术交流社区

标题: 求解答集合的删除 [打印本页]

作者: yueye13    时间: 2015-2-9 20:16
标题: 求解答集合的删除
  1. import java.lang.*;
  2. import java.lang.reflect.*;
  3. import java.util.*;
  4. class ReflectTest2
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                 Collection c=new HashSet();        //新建一个集合
  9.                
  10.                 //创建反射点对象,并传入参数
  11.                 ReflectPoint1 rp1=new ReflectPoint1(1,2);
  12.                 ReflectPoint1 rp2=new ReflectPoint1(3,4);
  13.                 ReflectPoint1 rp3=new ReflectPoint1(1,2);

  14.                 //将反射点中得到的元素添加到集合中
  15.                 c.add(rp1);
  16.                 c.add(rp2);
  17.                 c.add(rp3);
  18.                
  19.                 [color=Red]rp1.y=7;        //修改y的值之后,删除时就找不到原来的rp1,所以无法删除,此时就会出现内存泄露
  20.                 c.remove(rp1);        //删除元素[/color]
  21.                 System.out.println(c.size());
  22.                
  23.         }


  24. }
复制代码


对于上面,省略掉了反射点代码,打印长度还是2
先修改y的值,然后再删除集合元素,为什么就删不了rp1了呢,不是应该是修改了y的值之后,然后删除新的rp1吗?为什么删除的时候还是找的原来的rp1
作者: wf111sxwf    时间: 2015-2-10 23:25
是不能修改参与 hashCode()算法的属性值,如果没有参与hashCode算法的话 你再改它也能删除, 至于你为什么能删除呢  你去看看你 反射点的hashcode算法里有没有用到Y




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2