java hashmap替换key,HashMap 用可变对象作为 key 踩坑
點擊上方?
Java編程技術樂園,輕松關注!
及時獲取有趣有料的技術文章
做一個積極的人編碼、改bug、提升自己
我有一個樂園,面向編程,春暖花開!
作者:Icharle
https://icharle.com/hashmapkebianobj.html
前言
在 Java 道路上越踩越多坑,最近被問到一個知識點,當對象作為 HashMap 一個 key 時,在未重寫equals和hashcode方法時候,get方法返回的值為null。
分析
在下面一段代碼中,未重寫 equals 以及 hashCode 方法情況下,輸出結果為null。
改造后代碼:
原因分析
HashMap 在查找某一個 key 時,先是用 hashCode 函數根據該 key 的地址計算,再用 equals 函數根據對象的地址進行比較。
在代碼片段一中?: map.put(new People("icharle"), 18); 以及System.out.println(map.get(new People("icharle")));中默認是兩個對象 (也就是說兩個對象的地址不一樣,自然 hashcode 函數得到的值是不一樣 (因為兩個的對象的地址不同,自然在 equals 時候更不可能相等,最終得到的結果為 null。
在代碼片段二中:重載hashCode()函數的作用是:對于同一個 key,得到相同的 hash 值,重載equals()函數的作用是:向HashMap表明當前對象和 key 上所保存的對象是相等的。因此該情況下最終結果為 18
往期精彩回顧
歡迎長按下圖關注公眾號
后臺回復【資源】,獲取珍藏干貨!
99.9%的伙伴都很喜歡
朕已閱
總結
以上是生活随笔為你收集整理的java hashmap替换key,HashMap 用可变对象作为 key 踩坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab中的控制语句,MATLAB控
- 下一篇: jert oracle 统计说明,Ora