天天看點

自定義 Map 的 key 類型|學習筆記

開發者學堂課程【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 類型

自定義 Map 的 key 類型|學習筆記

雖然允許你使用自定義的類作為 Key 的類型,但是也需要注意一點,

在實際的開發之中對于 Map 集合的 Key常用的類型就是:String、Long、Integer,盡量使用系統類。

面試題:如果在進行 HashMap 進行資料操作的時候出現了 Hash 沖突( Hash 碼相同)

,HashMap 是如何解決的?

當出現了 Hash 沖突之後為了保證程式的正常執行,會在沖突的位置上将所有 Hash 沖突的内容轉為連結清單儲存。

自定義 Map 的 key 類型|學習筆記