黑马程序员技术交流社区

标题: 还是没能明白HashSet中关于内存泄露的问题 [打印本页]

作者: wenke    时间: 2015-4-2 18:43
标题: 还是没能明白HashSet中关于内存泄露的问题
改变参与运算hashcode值的变量后  使用删除操作会失败  但是还是能取出集合中已经变化了hashcode值的对象  为什么

作者: 林吉前    时间: 2015-4-2 18:47
{:2_39:}都好强 研究这么深奥的问题。。。
作者: 冻了冬天    时间: 2015-4-2 18:54
还没看到那,帮不了你
作者: 1659177869    时间: 2015-4-2 21:49
集合中存放的是对象的地址,hashMap中对象的地址
作者: 1659177869    时间: 2015-4-2 22:00
楼上手抖了..
集合中存放的是对象的地址,hashSet中对象的地址是根据对象的哈希值分配的,
比如对象被存入到hashSet中,存入到了0x0023这个地址,此时改变改变参与运算hashcode值的变量后,
hashCode值发生变化,hashSet根据这个值分配的内存地址可能是0x0088,但是对象此刻存的位置却是0x0023,
当调用remove,contains方法时,都走的是hashCode方法,得到的地址是0x0088,hashSet中这个位置没有对应的对象,那么就返回false,操作失败。  
但是这个对象还是在hashSet中的,所以遍历的到。
作者: z47057554    时间: 2015-4-2 23:13
楼上加一




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