澄子澄子大澄子 2021-11-05 22:34 采纳率: 84.6%
浏览 39
已结题

关于HashSet增删的问题,改变哈希值

img

这个是输出的结果

img

想半天想不出来是因为,还请指教一二,这个是说p1.name被更改, 然后哈希值不对,remove找不到这个位置 所以就删除不了。我也不知道这个书佛啊正不正确,还有为什么他最后会输出4个对象出来呀

  • 写回答

1条回答 默认 最新

  • Tomshidi 2021-11-05 22:48
    关注

    首先明确一点:HashSet中找到一个对象首先会根据对象的hashCode方法计算出hash,用这个hash找到一个坐标,再在这个坐标下找equals方法判断相等的对象。
    你重写了hashCode方法,使得对象的hash会根据name变化。假设第一次p1.name为AA时,p1是放在3号坐标下的。后面你把p1.name改成了CC,这个时候去删除,根据CC这个计算出的坐标是1,然后去1号坐标下找,原来的p1是放在3下面的,当然就找不到喽。
    干掉hashCode的重写就可以删除了。
    补充:你改变了对象属性,HashSet并不会自动给你重新计算元素应该放哪个位置。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月14日
  • 已采纳回答 11月6日
  • 创建了问题 11月5日

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行