更改可变字段后,计算出的 hashCode 不再指向旧存储桶,而 contains() 返回 false. 我们可以使用这些方法中的任何一种来解决这种情况.
- 从不可变数据计算时,Hashcode 是最佳的;因此,请确保只有不可变对象才能用作 Collections 的键 。
- 使用我们的第一种技术实现 hashCode() ,即返回一个常量值但你必须意识到它会杀死桶机制的所有优点 。
- 如果你需要 hashCode 方法中包含的可变字段,那么你可以在创建对象时计算和存储哈希值,每当你更新可变字段时,你必须先从集合中删除它( set / map ),然后将它添加回 更新后的集合 。
1.5 内存泄漏与HashCode和Equal
如果未实现 equals() 和 hashcode() ,则 Java 应用程序中可能会发生内存泄漏 。考虑下面的一个小代码示例,其中如果未实现 equals() 和 hashcode() ,则 HashMap 保持引用处于活动状态 。结果, HashMap 通过重复添加相同的键而不断增长,最后抛出 OutOfMemoryError。
public class HashcodeLeakExample {private String id;public HashcodeLeakExample(String id) {this.id = id;}public static void main(String args[]) {try {Map<HashcodeLeakExample, String> map = new HashMap<HashcodeLeakExample, String>();while (true) {map.put(new HashcodeLeakExample("id"), "any value");}} catch (Exception ex) {ex.printStackTrace();} } }
来源:公众号「锅外的大佬」
推荐阅读
-
-
【唐小小】斯嘉丽和Jennie的“渣女感”到底怎样穿出来的?
-
-
日产GT-R|智能手表也能无边界 3D 玻璃设计?我被惊到了
-
驱动之家|阿里王帅:不能接受,自媒体小白天下编造70多篇蒋凡事件黑稿道歉
-
爱心陪护君@有脂肪肝,日常身体会有哪些反应呢?要怎么去治疗?
-
防晒霜是长防晒好还是短防晒好?披肩好还是普通的好?
-
德怀特·霍华德|消失的霍华德!常规赛猛如虎,季后赛成隐形人,沃格尔真不会用他
-
-
篮球|NBA能攻又能防5大球星:乔治仅排第5名,湖人两大球星齐上榜
-
-
安养养生|危险的可不只是肿瘤本身,十个肿瘤患者七个营养不良
-
[黄金]美国23天印钞12万亿,美联储或数次阻止运回黄金后,事情有新变化
-
-
快科技:机械硬盘去矣!鲁大师:SSD普及率已达77.72%
-
-
生日当天请客后,舍友说会送礼物一直没送。而另一个舍友生日还没到就被送了礼物,是不是我宿舍关系不好?
-
为养老金将母亲藏尸冰柜获刑10月|骇人听闻!为养老金将母亲藏尸冰柜获刑10月 背后原因曝光,还有人性吗
-
lgd|TS玩肉或是IG的答案,但对LGD行不通,宁王野核还是问题
-