第一講 Map概述&子類對象特色&共性方法數據結構
一、 定義線程
Map集合:該集合存儲鍵值對,一對一對的往裏存,並且要保證鍵是惟一的。若存了重複的鍵,那麼對應此鍵的值將被後一個覆蓋。對象
二、 Map子類對象特色blog
Map集合有以下三個子類:排序
l Hashtable:底層是哈希表數據結構,不可存入null鍵或null值。線程同步,JDK1.0就有,效率稍低。接口
l HashMap:底層是哈希表數據結構,能夠存入null鍵或null值。線程同步,JDK1.2出現,效率較高。get
l TreeMap:底層是二叉樹數據結構,線程不一樣步,能夠用於給Map集合進行排序。同步
三、 Map集合中操做數據的功能io
1) 添加元素table
l Put(K key , V value)——將一個鍵值對存入Map集合中,若是集合中已存在相同的鍵,返回該鍵對應的值;若是集合中沒有相同的鍵,則返回Null。
l putAll(Map<? Extends K , ? extends V> m)——將一個Map集合中因此的鍵值存入另外一個Map集合中
2) 刪除
l Clear()——清空Map集合中;
l Remove(Object key)——刪除鍵key對應的元素,並返回值;
3) 判讀
l containsValue(Object value)——按值判斷map集合中是否存在對應的元素;
l containsKey(Object key)——按鍵判斷map集合中是否存在對應的元素;
l isEmpty()——判斷Map集合是否爲空;
4) 獲取
get(Object key)——根據鍵獲取map集合中的元素;
size()——獲取map集合中原元素個數;
values()——獲取map集合中全部的值
代碼實現以下:
第二講 Map集合的兩種取出方式:keySet和entrySet
一、 獲取Map集合中元素的思路:map中用根據鍵獲取值的方法get(),若是咱們能獲取到集合中全部的鍵,那就能夠利用get()方法來獲取集合中的值了。
二、 利用keyset方式來取出Map集合中的元素
思路:Keyset方法能夠獲取到集合中全部的鍵,並將這些鍵存入Set集合中。而後咱們能夠經過迭代器讀取Set中的鍵,再利用get()獲取每個鍵對應的值。
代碼實現以下:
三、 利用entrySet方式來取出Map集合中的元素
思路:經過entrySet()方法能夠獲取Map集合中的映射關係(Map.Entry<K,V>),並存入Set集合中。經過映射關係接口Map.Entry<K,V>中的getKey()和getValue()方法來獲取關係中的鍵和值。
Map.Entry說明: Entry也是一個接口,它是Map接口中的一個內部接口,並且是靜態的,可經過外部接口直接調用。注意:內部接口由內部類來實現。
代碼實現以下:
四、 練習
題目:每個學生都有對應的歸屬地,學生屬性有:姓名、年齡,當姓名和年齡相同時視爲同一個學生。要保證學生的惟一性
思路:
l 描述學生;
l 定義Map容器,將學生做文 鍵,地址做爲值,存入容器;
l 獲取Map集合中的元素;
代碼實現以下:
五、 Map集合擴展
當鍵和值不是一對一關係,而是一對多關係,而多個對象又有鍵值對關係,此時須要利用嵌套map集合的方式存儲。
解決思路:能夠先將多個對象封裝到一個Map集合中,而後再將給集合和鍵存入外面的Map集合中。
代碼實現以下:
知識點總結
一、 Map 中的鍵和值都是一對一關係,且鍵在Map中必須是惟一的。若存在一對多的關係時,可使用嵌套map集合的方式進行存儲,即,將多個對象先存放在內嵌map集合中,而後將此集合存入另外一個map集合中。
二、 取得map集合中全部值的方法有以下三種
l Collection<V> values();
l keySet方式
思路:先獲取Map集合鍵,而後根據鍵取值。
l entrySet方式
思路:先獲取Map集合中的映射關係,而後利用獲取的映射關係來獲取Map集合中的值。