更改可变字段后,计算出的 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();} } }
来源:公众号「锅外的大佬」
推荐阅读
-
汽车公园vip近照曝光:却意外撞脸蔡徐坤?,林志颖儿子Kimi才是“整容式长大”
-
经典|猴哥的一句经典名言,被众人改为口头禅,却让他背了千年黑锅
-
思远军事■22架美国飞机来了,美企:中国才有能力生产,大洋彼岸机群轰鸣
-
乔尔-恩比德|大帝降临布鲁克林?美媒曝篮网追求恩比德,联手欧杜冲击总冠军
-
中国中医科学院广安门医院■广安门医院首场防控新冠肺炎疫情国际视频交流会顺利举办
-
-
洛阳晚报|洛阳一高考考生忘带重要证明无法进场,执勤民警带其火速取回
-
装修房子把承重墙的钢筋打断了,其中竖的钢筋打断两根,横的钢筋打断三根,这回有啥影响啊有点担心
-
-
-
全国党媒信息公共平台|水漫路牙石,外卖小哥雨中徒手掏出排水口垃圾
-
萌宠大机密|现车优惠五万,销量不及Q5零头,【到店实拍】路虎最便宜一款车
-
【】阿联酋火星探测器发射升空 明年初抵达环火星轨道
-
-
物种|中国已发现660多种外来入侵物种 这类尤须警惕
-
#安卓#谷歌下最后通牒!谷歌给出最后期限,开始回收安卓系统权限!
-
-
达佩奇侃大事|首都离我国仅有45公里,曾是中国领土,唯一不和中国建交的邻国
-
外贸|转正了!我国前三季度外贸进出口同比增长0.7%
-
健养张医师|可以坚持吃3种食物,营养丰富、滋补身体!,女性不愿老太快