開發者學堂課程【Java 進階程式設計:自定義 Map 的 key 類型】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址:
https://developer.aliyun.com/learning/course/20/detail/421自定義 Map 的 key 類型
關于 Key 的定義
在使用 Map 集合的時候可以發現對于 Key 和 Value 的類型實際上都可以由使用者任意決定,那麼也就意味着現在依然可以使用自定義的類來進行 Key 類型的設定
對于自定義 Key 類型所在的類中一定要覆寫 hashCode() 與 equals() 方法,否則無法查找到。
public v put(K key , v value) { return putVal(hash( key), key, value, false, true); | 在進行資料儲存的時候發現會自動使用傳入的 key 的資料生成一個 hash碼,也就是說存儲的時候是有這個Hash 數值。 |
public v get (object key) { Node<K,V> e; return (e = getNode(hash(key), key ) ) == null ?null : e.value; } | 在根據 key 擷取資料的時候依然要将傳入的 key 通過 hash() 方法來擷取其對應的 hash 碼,那麼也就證明,查詢的過程之中首先 要利用 hashCode() 來進行資料查詢的時候還需要使用到 equals() 方法 |
範例:使用自定義類作為 Key 類型
雖然允許你使用自定義的類作為 Key 的類型,但是也需要注意一點,
在實際的開發之中對于 Map 集合的 Key常用的類型就是:String、Long、Integer,盡量使用系統類。
面試題:如果在進行 HashMap 進行資料操作的時候出現了 Hash 沖突( Hash 碼相同)
,HashMap 是如何解決的?
當出現了 Hash 沖突之後為了保證程式的正常執行,會在沖突的位置上将所有 Hash 沖突的内容轉為連結清單儲存。