澄子澄子大澄子 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日

悬赏问题

  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误