成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Map的Key你真的了解嗎?

開發 前端
如果你使用一個可變對象作為Key,比如一個List,情況會變得復雜。如果在存入HashMap后,你修改了List的內容,它的hashCode就會改變,導致HashMap無法正確找到存儲的位置。

何類作為Map的Key?為什么HashMap中String、Integer這樣的包裝類適合作為Key?如果使用Object作為HashMap的Key,應該怎么辦?” 這個問題看似簡單,但實際上涉及到HashMap的核心機制,面試中說得清楚絕對能讓面試官眼前一亮!

話不多說,讓我們通過一個小故事,邊學邊聊。

初識問題:能否使用任何類作為Map的Key?

故事從小明找工作說起。小明在面試時被問到:“你能用任何類作為Map的Key嗎?”

小明想了想,答:“理論上可以吧,但會有坑。”

沒錯,理論上任何類都可以作為Map的Key。但是!能否真正高效和正確地使用,得滿足兩個條件:

  • 必須重寫hashCode()方法:這是因為HashMap基于哈希表實現,hashCode()決定了對象的存儲位置。
  • 必須重寫equals()方法:當兩個對象的hashCode相同,HashMap會使用equals()方法來判斷它們是否真的相等。

如果你用的類沒有重寫這兩個方法,HashMap就可能無法正確判斷Key是否相等,導致奇怪的行為。比如,明明存進去了,卻取不出來。

為什么String和Integer適合作為Key?

接著,面試官進一步追問:“那為什么String和Integer這樣的包裝類適合作為Key呢?”

小明頓時慌了,但冷靜下來,他回憶起學過的知識,侃侃而談。

String

  • String的hashCode()實現簡單明了,基于內容計算哈希值。
  • 它的equals()方法也是內容比較,完全符合HashMap的需求。
  • 不可變性:String是不可變類,哈希值一旦計算,就不會因內容變化而失效。

Integer

  • Integer的hashCode()直接返回它的值,簡單高效。
  • equals()也是基于值的比較。
  • 同樣是不可變的包裝類,Key的狀態不會因外部修改而改變。

對比之下,如果你使用一個可變對象作為Key,比如一個List,情況會變得復雜。如果在存入HashMap后,你修改了List的內容,它的hashCode就會改變,導致HashMap無法正確找到存儲的位置。

如果使用Object作為Key,該怎么辦?

這時,面試官繼續刁難:“假如我想用自己的類Person作為Key呢?”

小明心里有底了,他微微一笑:“那就得自己實現hashCode()和equals()方法了。”

如何實現?

以下是小明舉的例子:

圖片圖片

  • hashCode():使用Objects.hash()方法將name和age的值組合成一個哈希值,保證哈希分布的均勻性。
  • equals():確保當兩個對象的name和age都相同時,它們被認為是相等的。

避坑指南:Key需要注意哪些問題?

1、不可變性

Key最好是不可變的(如String和Integer),否則會導致數據一致性問題。

2、重寫規則一致

如果你重寫了equals(),就必須重寫hashCode(),并保證規則一致:

  • 如果兩個對象相等(equals()返回true),它們的hashCode必須相等。
  • 如果兩個對象不相等,它們的hashCode盡量不同。

3、合理選擇Key

如果使用復雜對象作為Key,確保它的字段值不會頻繁變動,否則建議使用唯一標識符(如ID)。

總結

面試結束后,小明總結道:

  • 能否使用任何類作為Map的Key?:可以,但必須保證重寫hashCode()和equals()方法。
  • 為什么String和Integer適合作為Key?:它們有良好的hashCode()和equals()實現,并且是不可變類。
  • 如果使用自定義類作為Key?:重寫hashCode()和equals()方法,確保Key的唯一性和一致性。
責任編輯:武曉燕 來源: 軟件求生
相關推薦

2022-07-26 00:00:22

HTAP系統數據庫

2014-04-17 16:42:03

DevOps

2021-01-15 07:44:21

SQL注入攻擊黑客

2021-11-09 09:48:13

Logging python模塊

2014-11-28 10:31:07

Hybrid APP

2023-03-16 10:49:55

2020-02-27 10:49:26

HTTPS網絡協議TCP

2019-09-16 08:40:42

2021-11-26 08:07:16

MySQL SQL 語句數據庫

2023-11-01 13:48:00

反射java

2018-01-06 10:38:51

Ping抓包 ICMP協議

2012-05-31 09:56:54

云安全

2023-10-24 08:53:24

FutureTas并發編程

2019-11-06 09:52:01

JavaScript單線程非阻塞

2022-03-14 07:53:27

ELTETL大數據

2022-12-12 08:46:11

2015-07-31 10:35:18

實時計算

2017-10-18 22:01:12

2024-02-02 08:50:20

Node.js元數據自動化

2022-01-17 07:32:34

Java參數方法
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 丁香五月网久久综合 | 成人亚洲精品久久久久软件 | 91九色在线观看 | 亚洲一区国产 | 日韩精品免费在线 | 一级欧美| 亚洲综合五月天婷婷 | 97色在线观看免费视频 | 国产精品99久久久久久动医院 | 成人精品一区二区三区 | 精品亚洲一区二区三区四区五区 | 国产做爰| 亚洲国产中文字幕 | 亚洲日本欧美 | 99re6在线视频精品免费 | 日韩精品亚洲专区在线观看 | 欧美色综合一区二区三区 | 亚洲国产精品va在线看黑人 | 天堂男人av | 成人黄色av网址 | 国产在线二区 | 久久久久久黄 | 日本成人在线观看网站 | 国产线视频精品免费观看视频 | 日日操夜夜操天天操 | 欧美精品在线一区二区三区 | 日韩欧美国产一区二区三区 | 狠狠干av| 国产小视频精品 | 日韩在线观看中文字幕 | 天天躁日日躁aaaa视频 | 在线观看第一页 | 欧美韩一区二区 | а_天堂中文最新版地址 | 中文字幕精品一区 | 欧美日韩视频在线 | 中文字幕在线观看国产 | 午夜精品 | 一区二区三区视频 | 中文字幕在线观看一区 | 精品伊人久久 |