上集說到Set,List,現在輪到Map。Map也是一種容器。
談到容器,我們不要認為容器只有一種,我們把容器當作一個概念。就好比我們在生活中想到裝東西的地方,我們可以想到缸,桶,盤,一切能裝東西的容器。
在計算機中想到集合和容器,我們應該想到List,Set,Queue隊列,Map這幾個集合容器。而我們在其中這幾個當中選取適合裝我們所需的數據。舉個生活的小李子,提水,你想到的是什麼?你第一反應想到的應該是桶這一類的東西,我覺得你不會想到用缸這一龐然大物。以現實生活中的例子反應到計算機中,就通俗易懂了!
Map是一種容器,其中的元素以key-value(鍵值對)的形式存儲,這個key-value鍵值對在Map接口中稱Entry<k,v>實體。
Map容器以key-value鍵值對形式存儲數據,一個鍵值對作為一個Entry存在,這種數據結構成為映射,一般而言,都是通過key-value去存儲或獲取value,可不能重複key已知;Map有多種實現,以哈希表(hashtable)作為底層數據結構實現。叫做HashMap,因此HashMap的實現原理即哈希表數據結構的實現原理。
Map常用方法
Map也是和List,Set一樣有增刪改查這幾個操作。
Map的增加操作方法有以下幾種。
put(key,value)和putAll()。
例子:
Map<String,String> map=new HashMap<String,String>();
使用put方法增加操作。
map.put("B", "banana");
map.put("A", "apple");
map.put("C", "casey");
System.out.println(map);
輸出結果為:{A=apple, B=banana, C=casey}。
觀察上面的代碼,基本操作都是和List,Set差不多的。只是存儲的結果不一樣而已。
下面來看一看刪除操作這幾個方法:clear和remove(key)。
map.remove("A");
最後的結果是刪除了A。列印顯示:{B=banana, C=casey}。
查詢是我們用的比較多一個,不管是什麼都會涉及到查詢操作,是驢是馬總得拉出來溜溜吧。
查詢是否有數據的方法比較多:get(key),containsKey,containsValue,isEmpty/size這幾個方法。
System.out.println(map.get("B"));
System.out.println(map.containsKey("B"));
結果為:banana。true。
Map是通過key-value鍵值對存儲map的。
Map本身是無序的,但我們可以通過簡單的數字,字母作為key,讓map有序。在開發過程中map有序使用情況較少。
HashMap
HashMap中的key底層數據結構是HashSet。
HashMap存儲結構是哈希表,key是無序的,查詢效率也是挺高的,添加、刪除效率也是很高。
HashMap 工作原理當向 HashMap 中通過 key 添加元素時,首先計算 key 的 hashcode,y=k(x)散列位置,如果該位置沒有元素,hashmap 執行添加操作;如果該位置有元素,和該鏈上的元素比較,如果相等,執行 hashmap 的更新操作,如果不相等,執行 hashmap 添加操作。
LinkedHashMap是Map的哈希表和連結列表實現,它繼承與HashMap、底層使用哈希表與雙向鍊表來保存所有元素。其基本操作與父類HashMap相似,它通過重寫父類相關的方法,來實現自己的連結列表特性。
01TreeMap
TreeMap是一個有序的key-value集合,通過紅黑樹實現。
TreeMap是key唯一性的。查詢、添加、刪除都屬於中等,一般!
實現參考TreeSet。