更改可变字段后,计算出的 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();} } }
来源:公众号「锅外的大佬」
推荐阅读
-
穿搭|四套复原款唐制汉服,配色端庄又典雅,带你领略大唐盛世
-
超10万只!多家企业紧急召回大批不合格口罩!看看你买了没
-
-
「黑喵游妮」新指挥官练好这几位轻松刷,碧蓝航线现版本13图红海自律阵容详解
-
新华国际时评:元首共识引领中美经贸磋商加速相向而行
-
飞行员|飞行员私自弃机跳伞,35吨战斗机砸进市区,93名学生成为牺牲品
-
-
阴滋病到底存在吗?如果是恐艾。那为何关节会响?这个症状应该不是精神因素引起的吧。请科学的给我科普一下?
-
从“靠湖吃湖”到“上岸就业”——洪湖渔民的生态转型
-
电竞天堂|继UZI后,又一传奇AD被伤病折磨,坦言:躺在病床上真的很害怕
-
『小学生研究癌症』小学生研究癌症获奖 大赛组委会:已成立专项调查组核查
-
周深 周深李玉刚惊艳亮相 酷狗国风音乐盛典口碑爆棚
-
-
茶艺美女表演,云雾香茶艺队荣获龙岩市第三届茶艺表演赛二等奖
-
-
果粉之家|12下周见,或回归指纹解锁,A14处理器多项跑分曝光!,iPhone
-
上观|长三角电影编剧高级研修班在沪举办 学员希望毕业时剧本100分并顺利孵化
-
王者荣耀|新赛季更新仅两天,对抗路霸主已出现,碾压铠皇超越关羽,脆皮没有游戏体验
-
-
【玲谈育儿】测一测你是什么命!,心理测试:你最喜欢吃下面哪盘鱼肉