A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Kikyou 中级黑马   /  2014-8-26 21:58  /  1189 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 格子、 于 2014-8-27 08:02 编辑

当使用HashSet集合时,会根据HashCode()方法计算出相应的HashCode值,通过equals()方法来比较集合中是否存在这个对象,当一个对象已经添加进去之后,再来修改这个对象中参与HashCode()方法计算时的变量,那么这个对象的HashCode值也会改变,原本相等的对象就不再相等了。
  1. Collection<ReflectPoint> set = new HashSet<ReflectPoint>();
  2. ReflectPoint rp2 = new ReflectPoint(3,3);
  3. ReflectPoint rp3 = new ReflectPoint(5,5);
  4. ReflectPoint rp4 = new ReflectPoint(3,3);
  5. set.add(rp2);
  6. set.add(rp3);
  7. set.add(rp4);
  8. rp2.y = 7;
  9. set.remove(rp2);
  10. System.out.println(set.size());//2
  11. rp2.y = 3;
  12. set.remove(rp2);
  13. System.out.println(set.size());//1
复制代码


4 个回复

倒序浏览
hashcode()是利用哈希算法算的出哈希值,是在hashcode()的计算的值在一个区间equals比较对象的内容,在集合存储完对象,如果hashcode()方法的值你给改了就会造成内存泄漏!!!!!
回复 使用道具 举报
看来又得复习了
回复 使用道具 举报
   不错, 受益匪浅!
回复 使用道具 举报
嗯嗯,
hashcode()是利用哈希算法算的出哈希值,是在hashcode()的计算的值在一个区间equals比较对象的内容,在集合存储完对象,如果hashcode()方法的值你给改了就会造成内存泄漏!!!!!
赞一个。。。。。。。。这种问题在集合中比较常见吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马