JAVA編程思想(第四版)學(xué)習(xí)筆記----11.10 Map
之前學(xué)習(xí)的是Collection層次的List接口。List層次比較簡(jiǎn)單,除去與多線程安全相關(guān)的CoppyOnWriteArrayList<T>類,這一個(gè)類在集中涉及多線程相關(guān)知識(shí)時(shí)候再學(xué)習(xí),以及已經(jīng)過時(shí)的向量Vector<T>、棧Stack<T>外,只剩下兩種比較常用的List接口的實(shí)現(xiàn),也就是基于數(shù)組的ArrayList和基于鏈表的Linkedlist兩個(gè)類。這兩個(gè)列表實(shí)現(xiàn)中最簡(jiǎn)單、最常用的還是ArrayList。至于LinkedList,由于其具體實(shí)現(xiàn)中實(shí)現(xiàn)了Deque隊(duì)列接口,在功能上具有比列表更多的功能,所以在學(xué)習(xí)完隊(duì)列之后再學(xué)習(xí)Linkedlist應(yīng)該是比較合理的。
在平時(shí)的開發(fā)中由于隊(duì)列用到的比較少,所以關(guān)于隊(duì)列的學(xué)習(xí)也放置在后面。Collection中的另外一個(gè)常用的容器是Set接口的相關(guān)實(shí)現(xiàn)類。又由于java在設(shè)計(jì)Set實(shí)現(xiàn)類時(shí)是基于Map進(jìn)行實(shí)現(xiàn)的,也就是說沒有Map就沒有Set,故而接下來先學(xué)習(xí)Map,然后再學(xué)習(xí)Set,這個(gè)學(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提供將鍵映射到值的對(duì)象,一個(gè)映射不能包括重復(fù)的鍵;每個(gè)鍵最多只能映射到一個(gè)值(但是值的類型可以為單值類型比如String,也可以為多值類型比如List)。Map接口提供三種collection視圖,允許以鍵集,值集,或鍵值對(duì)映射關(guān)系集的形式對(duì)某個(gè)映射進(jìn)行查看。映射順序定義為迭代器在映射的collection視圖上返回其元素的順序。某些映射實(shí)現(xiàn)可明確保證其順序,如 TreeMap、LinkedHashMap 類;另一些映射實(shí)現(xiàn)則不保證順序,如HashMap 類。
某些映射實(shí)現(xiàn)對(duì)可能包含的鍵和值有所限制。例如,某些實(shí)現(xiàn)禁止 null 鍵和值,另一些則對(duì)其鍵的類型有限制。
抽象類AbstractMap<K,V>