黑马程序员技术交流社区

标题: HashCode的理解 [打印本页]

作者: Kikyou    时间: 2014-8-26 21:58
标题: HashCode的理解
本帖最后由 格子、 于 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
复制代码



作者: 格子、    时间: 2014-8-27 08:07
hashcode()是利用哈希算法算的出哈希值,是在hashcode()的计算的值在一个区间equals比较对象的内容,在集合存储完对象,如果hashcode()方法的值你给改了就会造成内存泄漏!!!!!
作者: lfs454766767    时间: 2014-8-27 08:11
看来又得复习了
作者: TheBest__^    时间: 2014-8-27 10:26
   不错, 受益匪浅!
作者: 彭卫红    时间: 2014-8-28 00:20
嗯嗯,
hashcode()是利用哈希算法算的出哈希值,是在hashcode()的计算的值在一个区间equals比较对象的内容,在集合存储完对象,如果hashcode()方法的值你给改了就会造成内存泄漏!!!!!
赞一个。。。。。。。。这种问题在集合中比较常见吧




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