更改可变字段后,计算出的 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();} } }
来源:公众号「锅外的大佬」
推荐阅读
-
『zol中关村在线』更便宜的全新23寸iMac 边框变窄 配置升级
-
啥情况?周深工作室注册少管我商标 具体发生了什么?
-
我为肌肉狂|睡前5个小动作,教你轻松练出天鹅臂,告别拜拜肉
-
[蓝菇凉说]对得起价格,基本三年不卡!,目前公认受欢迎的四款华为
-
『旷世君玄』三星S10沦为百元机大降价!,联发科P65+水滴屏三星A41发布
-
澎湃新闻|伊朗演习首次公开地下发射导弹,美国或许知晓导弹埋藏地点
-
『环球新军事』切尔诺贝利辐射增加,放射元素直扑俄罗斯,美国卫星拍下恐怖一幕
-
二合一|看规划馆、博物馆二合一的数字博物馆,了解包公故里的前世今生
-
中国新闻网|山西太原出台“人才购房”新政暂试行至2020年12月31日
-
早安隆回|《早安隆回》越火,袁树雄的争议就会越大!
-
太平鸟育儿经|父母晚年有着落,心理学:孩子的孝心哪里来?对他做好3件事
-
-
明星穿搭|马蓉晒日本游照,皮衣短裙配高筒袜身材不输樱花妹,生活惬意
-
大花搞笑|和富豪认识90分钟后闪婚,如今出入豪车接送,曾在春晚上出尽洋相
-
-
-
-
-
挖贝网 业务订单减少,骅盛车电2020年上半年净利344.74万同比增长45.93%
-
央视网|美国明尼苏达州州长:该州的新冠病毒感染中 70%与私人聚会、酒吧和餐馆有关