关于mutable type的等价性问题

关于mutable type的等价性
有时候,观察等价性可能到时bug,甚至可能破坏RI
例:
其结果为

为什么我们对Set中的元素list进行了mutate后(仅仅在list中增加了一个元素"B"),再次在Set中寻找list时,尽管Set中确实包含一个[A,B]的List,但set.contain(list)的结果却是false?

因为List是一个mutable type,而对mutable type具体实例进行的mutation操作会影响这个实例equal()和hashCode()的结果。

具体而言,当List list被mutated后,它的hashCode会发生改变,但是在HashSet中并没有把list移到一个新的bucket(哈希桶),因此,这个List就会再也找不到了。(因为它的HashCode变了, 但在HashSet的位置却没有改变)
如图所示,对list的add操作前后,HashSet没有发生改变,改变的只有list的hash值
在这里插入图片描述在这里插入图片描述因此,对于即合Set同一个元素list,当其经过mutation操作,使hashCode发生了改变,Set中也无法找到当出的list了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值