天天看點

Java集合架構之Map

Map介紹

在之前的學習中,我們學習了集合架構的Set和List,今天主要想講一講Map的一些知識點。而我本人也是第一次學習集合架構。前面我們知道了,Set和List。在Set中,元素有序不可重複;List中,元素有序,可重複。

而在Map當中,由于Map是映射,由鍵值對(Key-Value)組成的,是以,它的鍵不可重複,值可重複。

Map特點

位于包:jva.util.Map

特點:

  • 1、是一個雙列的資料模型
  • 2、所存儲的對象稱為鍵值對,同一對象中,鍵唯一,值可重複
  • 3、Map底層通過hash表進行資料存儲
  • JDK1.8之前hash表通過數組+連結清單的方式實作//提高查詢效率之後hash表通過數組+連結清單+紅黑樹//連結清單長度大于八時,由連結清單轉換為紅黑樹,進一步提升效率
  • 4、常用實作類:
  • HashMap:存儲鍵值對,無序
  • HashTable: 無序,線程安全

    ----Properties(子類):讀取配置檔案

  • LinkedHashMap:存儲鍵值對,無序
Map接口的實作
Java集合架構之Map

1、HashMap介紹

HashMap存放鍵值對,<Key,Value>其中,鍵值不可重複,值可重複。

1)構造方法:

HashMap(int initialCapacity)

構造一個具有預設初始容量 (16) 和預設加載因子 (0.75) 的空 HashMap。
           

HashMap(int initialCapacity)

構造一個帶指定初始容量和預設加載因子 (0.75) 的空 HashMap。
           

HashMap(int initialCapacity, float loadFactor)

構造一個帶指定初始容量和加載因子的空 HashMap。
           

HashMap(Map<? extends K,? extends V> m)

構造一個映射關系與指定 Map 相同的新 HashMap。
           

2)常用方法

void clear() 從此映射中移除所有映射關系。

boolean containsKey(Object key)

   如果此映射包含對于指定鍵的映射關系,則傳回 true。

boolean containsValue(Object value)

    如果此映射将一個或多個鍵映射到指定值,則傳回 true。

Set<Map.Entry<K,V>> entrySet()

傳回此映射所包含的映射關系的 Set 視圖。

Set keySet()

傳回此映射中所包含的鍵的 Set 視圖。

boolean isEmpty()

如果此映射不包含鍵-值映射關系,則傳回 true。

V put(K key, V value)

在此映射中關聯指定值與指定鍵。(傳回值為被替換的Value)

代碼(主要是entrySet和KeySetd的使用):

//指定泛型時需要同時指定Key、Value的類型
 Map<Integer,String> map=new HashMap<Integer,String>();
 map.put(011, "小明");
 map.put(102, "王二");
 map.put(013, "張山");
 map.put(014, "李四");
 System.out.println(map.containsKey(014));//找鍵值為015的是否存在
 System.out.println(map.containsValue("小明"));//找值為小明的是否存在
 //set KeySet的應用,周遊
 Set<Integer> se=map.keySet();//将Map的鍵取出來放于,Set集合中,用于周遊
 //Map本身沒有疊代器,不能周遊輸出。
 Iterator it=se.iterator();//Set執行周遊操作
 while(it.hasNext()) {
  Integer a=(Integer) it.next();
  System.out.println("鍵值為:"+a+"  "+"值為:"+map.get(a));
 }
 System.out.println("--------------------");
 //EntrySet的應用
 //public Set<Map.Entry<K,V>> entrySet()
 Set<Entry<Integer,String>>sr=map.entrySet();//得到Entry集合。下面對其使用疊代器
 Iterator ip=sr.iterator();
 while(ip.hasNext()) {
  Entry<Integer,String> sw=(Entry<Integer, String>) ip.next();
  //Entry的sw對象可以分别取Key和Value
  System.out.println("鍵為:"+sw.getKey()+"  "+"值為:"+sw.getValue());
 }
 //增強for循環
 System.out.println("-------==================------------");
 for(Entry<Integer,String> c:sr) {
  System.out.println(c.getKey()+"   "+c.getValue());
 }
           

2、HashTable和TreeMap

此處略略略。

值得一提的是HashTable是線程安全的。不過一般不太用它了。

但是它的一個子類在經常被使用:

----Properties(子類):讀取配置檔案。

感興趣的可以自己去查詢相關資料。