更改可变字段后,计算出的 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();} } }
来源:公众号「锅外的大佬」
推荐阅读
-
LG电子|LG关闭手机业务一周年!老外点评:真正的创新者 太遗憾了
-
-
#徐丽婷讲趣事#现在事业如日中天,她17年前靠给李咏砸金蛋为生,
-
-
-
ACG次元饭|火影忍者:高招木叶丸细节爆料,技能召唤猿魔棒,可能有几个
-
吃姜的好处和坏处都有哪些?我把姜切丝炒菜吃,每次炒菜都放很多姜在里面,吃了有好处吗?
-
社会热点访谈|数万士兵面临绝境,现在撤兵还来得及!印军唯一退路突然被切断
-
-
陕汽X6000上市、奔驰Actros要国产,重卡圈大事件盘点
-
如果让你一天除睡觉外的时间中有两个小时不看手机,你会有怎么样的感受,反正我已经难受死了……
-
数据|秦淮数据正式登陆纳斯达克 获近20倍超额认购
-
数据库迁移:从 SQL Server 到 PostgreSQL
-
-
上官婉儿:真正有魅力的女人,能征服男人,更能征服女人
-
快科技 Z Flip不要贴膜:否则保修失效,三星提示Galaxy
-
中国新闻网|安倍将视察灾区,日本熊本县等地暴雨致70人死亡
-
「球星工厂」却说出惊人言论:2万人去看球没问题,德国名宿自曝曾感染新冠
-
节目|Yamy风波后做客直播节目 “胜利在望”疑似回应解约纠纷
-