更改可变字段后,计算出的 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();} } }
来源:公众号「锅外的大佬」
推荐阅读
-
『印度』新官上任三把火,印上将抛出:百万大军调转枪口,专家:62年悲剧或重演
-
微博网友|?快看!国家制止餐饮浪费将立法 你的消费习惯要改了
-
中商情报网|2020年全球医疗器械市场现状分析及市场规模预测
-
-
美国修改留学生签证新规,体现了特朗普政府的短视与算计
-
抖音|今年上半年全球最赚钱、下载量最大App出炉:都来自中国
-
央视新闻|北京新发地批发市场终末消杀工作已完成 结果合格
-
湘江北去|中共湖南群林科技有限公司支部委员会党员大会隆重举行
-
如何取消优酷会员自动续费服务,怎么取消优酷会员的自动续费功能
-
环球网|韩国赴华乘客登机核酸检测证明时限调整 中使馆提醒
-
快科技:SE比最快的Android手机都要快,库克:iPhone
-
-
数据|万国数据赴港二次上市首日涨3% 收入高增长4年连亏
-
-
-
无人机网慧明捷参与四川省“全省人防指挥通信比武竞赛”活动保障
-
孕妇|明明有风险成分,还鼓吹着“孕妇专用”?有些洗面奶就该丢垃圾桶
-
-
成龙|直到去世时,李连杰成龙还没原谅他,网友∶这是有多大的仇怨!
-
詹姆斯|复制詹皇之路?字母哥社媒取关雄鹿队友,轰动NBA交易要出现了