更改可变字段后,计算出的 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();} } }
来源:公众号「锅外的大佬」
推荐阅读
-
「搜狐新闻」做可乐鸡翅要不要放水?以前都搞错了!厨师这样做,鸡翅鲜嫩营养
-
视讯广电TB 中国移动:6G网络将由“3层+4面”组成
-
『熊猫宝来』新州新增29,创近期最高纪录!7周大婴儿确诊与大范围检测有关?
-
「试车极速报告」3长续航,新款A4L上市…宝马3系说:不慌,面对Model
-
『』中国进入一级战备后,能发射多少枚导弹,专家:26个导弹旅待命
-
[重庆]华为鲲鹏重庆中心揭牌!重庆华为深化战略合作!
-
-
DeepTech深科技欧盟汽车安全机构测评辅助驾驶,特斯拉Autopilot“严重偏科”
-
涛涛不兴|财运如火,3属相添丁添财,有钱日子闲,10月下旬
-
沸腾的泡沫红茶|实用黑科技好物|BOW航世可充电蓝牙键盘
-
阿里巴巴|坚果首款5G新机即将到来,或命名坚果Pro4,产品经理已经上手
-
-
小月子多久能同房■小月子过早同房好吗 当心不孕症找上门
-
-
东方网|东方时评丨从爸爸带12岁女孩去“自首”说起
-
微九寨|受降雨影响,九寨沟县两旅游大巴车遭遇山石垮塌致1死6伤
-
俏佳人|还用剪刀剪成高开叉, 这也太独特了吧!,美女穿“透视裙”出门,
-
-
-
袜子有破洞别急着扔,把袜子套在拖鞋上,用途真厉害,长见识了