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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

改变参与运算hashcode值的变量后  使用删除操作会失败  但是还是能取出集合中已经变化了hashcode值的对象  为什么

5 个回复

倒序浏览
{:2_39:}都好强 研究这么深奥的问题。。。
回复 使用道具 举报
还没看到那,帮不了你
回复 使用道具 举报
集合中存放的是对象的地址,hashMap中对象的地址
回复 使用道具 举报
楼上手抖了..
集合中存放的是对象的地址,hashSet中对象的地址是根据对象的哈希值分配的,
比如对象被存入到hashSet中,存入到了0x0023这个地址,此时改变改变参与运算hashcode值的变量后,
hashCode值发生变化,hashSet根据这个值分配的内存地址可能是0x0088,但是对象此刻存的位置却是0x0023,
当调用remove,contains方法时,都走的是hashCode方法,得到的地址是0x0088,hashSet中这个位置没有对应的对象,那么就返回false,操作失败。  
但是这个对象还是在hashSet中的,所以遍历的到。
回复 使用道具 举报 1 0
楼上加一
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马