一、集合框架源碼分析
- 集合框架 (第 01 篇) 源碼分析:Collection<E> 框架總覽
- 集合框架 (第 02 篇) 源碼分析:Map<K,V > 框架總覽
- 集合框架 (第 03 篇) 源碼分析:ArrayList<E>
- 集合框架 (第 04 篇) 源碼分析:LinkedList
- 集合框架 (第 05 篇) 源碼分析:Map<K, V>接口與其內(nèi)部接口Entry<K,V>
- 集合框架 (第 06 篇) 源碼分析:哈希沖突(哈希碰撞)與解決算法
- 集合框架 (第 07 篇) 源碼分析:jdk1.7版 HashMap
- 集合框架 (第 08 篇) 源碼分析:HashMap、Hashtable里覆、ConcurrentHashMap之間的區(qū)別
- 集合框架 (第 09 篇) 源碼分析:jdk1.7版 ConcurrentHashMap
- 集合框架 (第 10 篇) 源碼分析:二叉樹、平衡二叉樹础爬、二叉查找樹驳糯、AVL樹、紅黑樹
- 集合框架 (第 11 篇) 源碼分析:jdk1.8版 HashMap
- 集合框架 (第 12 篇) 源碼分析:jdk1.8版 ConcurrentHashMap
- 集合框架 (第 13 篇) 源碼分析:LinkedHashMap
- 集合框架 (第 14 篇) 源碼分析:TreeMap
- 集合框架 (第 15 篇) 源碼分析:Set<E> 集合
- 集合框架 (第 16 篇) 源碼分析:BlockingQueue 接口
- 集合框架 (第 17 篇) 源碼分析:CopyOnWriteArrayList 與 CopyOnWriteArraySet
原文持續(xù)更新鏈接: https://github.com/about-cloud/JavaCore
正文
本文是基于
jdk1.7.0_71
分析
一赏表、Map接口
Map接口是整個 Key-Value 存儲容器的核心检诗。它 抽(qǔ)(xíng)象 定義了 Key-Value 結(jié)構(gòu)的容器框架匈仗。Map不會像 數(shù)組 中元素那樣可以單獨存放,到像似
LinkedList
中的節(jié)點自定義逢慌,那么特殊的節(jié)點一定需要特殊的定義來描述悠轩。在jdk1.7
及其之前的版本,Map的作者將其節(jié)點描述為 Entry 涕癣,Entry不是入口、大門前标,它在這里稱為 項目 或 條目 坠韩,下文簡稱為 項。Map 中的每個節(jié)點稱為一項
炼列。
二只搁、Map.Entry
Entry<K, V> 是Map內(nèi)部的接口,其中定義了一些方法:
// 返回此項對應(yīng)的key
K getKey();
// 返回此項對應(yīng)的value
V getValue();
// 設(shè)置此項中value值
V setValue(V value);
// 將指定的對象與此項進(jìn)行比較
boolean equals(Object o);
// 返回此項的哈希碼值
int hashCode()
Entry 項 的定義很簡單俭尖,主要是記住它是 Key-Value 形式氢惋,并有一些get/set方法。
三稽犁、Map中的方法
方法 意味著 行為焰望。下面Map的方法意味著整個Map框架具有最基本的、什么樣的 功能已亥。明白這些方法熊赖,就掌握了Map框架核心操作功能。
// 返回 map 中鍵值對的數(shù)量
int size();
// 返回 true 表示map中不包含鍵值對
boolean isEmpty();
// 判斷比較map中是否含有指定對象相等的key虑椎,如果含有返回true
boolean containsKey(Object key);
// 判斷比較map中是否含有指定對象相等的value震鹉,如果含有返回true
boolean containsValue(Object value);
// 通過key獲取對應(yīng)的value
V get(Object key);
// 放入 key-value鍵值對,并返回value
V put(K key, V value);
// 通過指定key的一項捆姜,并返回此項中的value
V remove(Object key);
// 放入另一個map
void putAll(Map<? extends K, ? extends V> m);
// 清空map
void clear();
// 返回map中key的Set集合
Set<K> keySet();
// 將map中的value以Collection的形式返回
Collection<V> values();
// 返回map中多個項的Set集合(此方法適合既獲取key又獲取value的場景)(請記住這個方法传趾,非常實用)
Set<Map.Entry<K, V>> entrySet();
// 將指定的對象與map項進(jìn)行比較
boolean equals(Object o);
// 返回map的哈希碼
int hashCode();
合抱之木,生于毫末;九層之臺,起于累土;千里之行,始于足下。
再次提醒泥技,請熟記這次基礎(chǔ)方法浆兰。