更改可变字段后,计算出的 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();} } }
来源:公众号「锅外的大佬」
推荐阅读
-
笑星坊|选择不慎,这就要命了啊,幽默笑话:有些运动不是适合每一个人的
-
虎扑足球中国职业足球根基动荡,沪媒:百日内22支队解散
-
回应|打完方腊后,武松不想回京,宋江见此冷眼回应4个字,字字诛心!
-
「开源中国」Android 被曝新 Bug,导致 Pixel、一加、小米等设备无响应
-
-
凯里奇Kyriech|完美的1分!巴萨再获好消息,梅西或将迎来好帮手
-
懒得说话,一点需要麻烦的事就急躁,真的是懒惰的表现吗
-
穿搭|减龄和显肤白的效果,引人注目,撑起整个秋天的优雅就靠它!
-
利津县检察院▲利津县检察院召开第一季度述职评议会议
-
英为财情Investing巴西股市收低;截至收盘巴西IBOVESPA股指下跌0.13%
-
-
【独家甄选】还有更多5G新机,联想手机布局确定!游戏手机就是拯救者
-
在健身房咋锻炼才能减掉大肚子和增加肌肉呢求给个计划!
-
装修材料 小户型该如何设计?小户型设计要注意哪些误区
-
中国早些年有6大通信运营商,为啥只剩下了移动、电信和联通?
-
-
-
-
优惠国内油价调整“四连停” 部分加油站进入3元时代
-
田震|56岁田震久居国外要回国?右眼充满红血色显疲惫,脸颊粉红打扮少女