更改可变字段后,计算出的 hashCode 不再指向旧存储桶,而 contains() 返回 false. 我们可以使用这些方法中的任何一种来解决这种情况.
- 从不可变数据计算时,Hashcode 是最佳的;因此,请确保只有不可变对象才能用作 Collections 的键 。
- 使用我们的第一种技术实现 hashCode() ,即返回一个常量值但你必须意识到它会杀死桶机制的所有优点 。
- 如果你需要 hashCode 方法中包含的可变字段,那么你可以在创建对象时计算和存储哈希值,每当你更新可变字段时,你必须先从集合中删除它( set / map ),然后将它添加回 更新后的集合 。
如果未实现 equals() 和 hashcode() ,则 Java 应用程序中可能会发生内存泄漏 。考虑下面的一个小代码示例,其中如果未实现 equals() 和 hashcode() ,则 HashMap 保持引用处于活动状态 。结果, HashMap 通过重复添加相同的键而不断增长,最后抛出 OutOfMemoryError。
来源:公众号「锅外的大佬」
推荐阅读
- java程序运行原理解析
- Java程序计数器刨根问底,大部分程序员都收藏起来了
- Java如何利用Socket请求Http接口?
- python中的列表与元组
- 粽子配茶中的学问
- 探究水浒传中的情节 水浒传的问题有哪些
- 日常生活中的茶保健
- 淘宝规则中的雷区有哪些 淘宝新手常犯的六大规则
- 你手中的国产老手表收藏意义吗
- 二 豉酒方的功效与作用
