更改可变字段后,计算出的 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();} } }
来源:公众号「锅外的大佬」
推荐阅读
-
邓锄头挖科技@高级产品不会告诉你的“十一条”需求沟通中超有效的注意事项!
-
-
忘川秋水|她在吐蕃的40年,真实生活是怎样的?,唐朝和亲入藏的文成公主
-
新华社|巴西又有州长感染新冠病毒,总计已有10个州长感染
-
你见过凌晨4点的高铁线吗 这背后的事情可以去思考一下
-
-
今年起,农村开启“禁养”模式,专家表示支持,农民的话很戳心!
-
旭日暖阳|5.99万元起售,新一代瑞虎5x哪款配置值得买?,上市就降1万元
-
净利|公告精选:山西省属燃气企业整合重组;万华化学上调10月份中国地区MDI价格
-
[社保缴费]30岁不交社保每年在银行存1万,退休后存下的钱真比社
-
-
唆麻 知识“风起”吹向百度知识属性,百度移动生态的底色从“双轮驱动”到“纵队协作”,差异化优势已成形与直播打配合,短视频必不可少结语:模式重构,总得有人先做,短视频娱乐“内卷
-
『孕妈』孕妈必备︱健荣凡士林霜,一款可以闭眼入手的润肤霜
-
「呆闻天下」惹事全靠实力,美国不愧是军事超级大国!武器出口是俄罗斯的三倍
-
宽松大方|秋日时尚穿搭,选一条宽松针织裙+松糕鞋搭配,简单大方轻松显高
-
-
『豪情NBA』霍华德“满血回归”,本赛季超值的五大底薪球员
-
行业唯一入选!Leader洗衣机获美国IDEA设计大奖
-
北青网综合|陕西新增1例境外输入确诊病例,涉及这趟航班
-