JAVA編程思想(第四版)學(xué)習(xí)筆記----11.10 Map

之前學(xué)習(xí)的是Collection層次的List接口。List層次比較簡單,除去與多線程安全相關(guān)的CoppyOnWriteArrayList<T>類,這一個類在集中涉及多線程相關(guān)知識時候再學(xué)習(xí),以及已經(jīng)過時的向量Vector<T>、棧Stack<T>外,只剩下兩種比較常用的List接口的實(shí)現(xiàn),也就是基于數(shù)組的ArrayList和基于鏈表的Linkedlist兩個類。這兩個列表實(shí)現(xiàn)中最簡單、最常用的還是ArrayList。至于LinkedList,由于其具體實(shí)現(xiàn)中實(shí)現(xiàn)了Deque隊列接口,在功能上具有比列表更多的功能,所以在學(xué)習(xí)完隊列之后再學(xué)習(xí)Linkedlist應(yīng)該是比較合理的。

在平時的開發(fā)中由于隊列用到的比較少,所以關(guān)于隊列的學(xué)習(xí)也放置在后面。Collection中的另外一個常用的容器是Set接口的相關(guān)實(shí)現(xiàn)類。又由于java在設(shè)計Set實(shí)現(xiàn)類時是基于Map進(jìn)行實(shí)現(xiàn)的,也就是說沒有Map就沒有Set,故而接下來先學(xué)習(xí)Map,然后再學(xué)習(xí)Set,這個學(xué)習(xí)順序應(yīng)該是比較合理的。

下面先放上一張Map接口的相關(guān)層次結(jié)構(gòu)圖(相關(guān)資源來自網(wǎng)絡(luò)):

Map接口中最常用到的實(shí)現(xiàn)類有HashMap(無序,快速訪問元素)、LinkedHashMap(按照添加順序排序,快速訪問)、TreeMap(按照鍵的比較升序排列)

 

接口Map<K,V>

public interface Map<K,V> 

Map<K,V>接口是Map層次的根接口,與Collection<T>接口不同的是,該接口是真正的根接口,并沒有拓展自其他的接口。

Map提供將鍵映射到值的對象,一個映射不能包括重復(fù)的鍵;每個鍵最多只能映射到一個值(但是值的類型可以為單值類型比如String,也可以為多值類型比如List)。Map接口提供三種collection視圖,允許以鍵集,值集,或鍵值對映射關(guān)系集的形式對某個映射進(jìn)行查看。映射順序定義為迭代器在映射的collection視圖上返回其元素的順序。某些映射實(shí)現(xiàn)可明確保證其順序,如 TreeMap、LinkedHashMap 類;另一些映射實(shí)現(xiàn)則不保證順序,如HashMap 類。 

某些映射實(shí)現(xiàn)對可能包含的鍵和值有所限制。例如,某些實(shí)現(xiàn)禁止 null 鍵和值,另一些則對其鍵的類型有限制。

 

抽象類AbstractMap<K,V>