1. 程式人生 > >Java類集框架(五):偶物件儲存:Map介面

Java類集框架(五):偶物件儲存:Map介面

Map集合可以儲存一對關聯資料(按照“key = value”的形式)。

Map介面的常用方法

方法 型別 描述
public V put(K key, V value) 普通 向集合中儲存資料
public V get(Object key) 普通 根據key查詢對應的value資料
public Set<Map.Entry<K, V>> entrySet()
普通 將Map集合轉化為Set集合
public Set<K> keySet() 普通 取出全部的key

Map介面的兩個常用子類:HashMap、Hashtable。

HashMap子類的使用

import java.util.HashMap;
import java.util.Map;

public class TestHashMap {

    public static void main(String[] args) {
        Map<String, Integer> map = new
HashMap<String, Integer>(); //出現key重複的情況,就會使用新的資料替換已有資料。 map.put("a", 1); map.put("b", 2); map.put("c", 3); map.put("d", 4); map.put(null, 5); map.put("f", null); System.out.println(map); } } //程式的執行結果為:{null=5, a=1, b=2, c=3, d=4, f=null}

上例利用HashMap實現了Map集合最基礎的資料儲存操作。通過此例可以看出Map如下特點:

  • 使用HashMap定義的Map集合是無序存放的;
  • 如果發現了重複的key會進行覆蓋,使用新的內容替換舊的內容;
  • 使用HashMap子類儲存資料時key和value均可取null

PS:Map與Collection的區別
Map和Collection都可以儲存動態長短的資料,其本質的區別在於使用的環境。

  • Collection :利用Iterator介面輸出資料。
  • Map:實現用過key查詢value的字典功能。

HashMap與HashTable的區別:

區別點 HashMap HashTable
效能 非同步處理 同步處理
資料安全 非執行緒安全 執行緒安全
設定null 允許key或value內容為null 不允許設定null

利用Iterator輸出Map集合

這裡寫圖片描述
由此可知,Collection集合儲存資料時所有物件是直接儲存的,而Map集合儲存資料時,所儲存的key和value會自動包裝成為Map.Entry介面物件。如果利用Iterator進行迭代,那麼next()方法所返回的資料是一個Map.Entry介面物件,如下定義。
public static interface Map.Entry<K, V>{}
該介面定義的常用方法如下:

方法 型別 描述
public K getKey() 普通 取得資料中的key
public V getValue() 普通 取得資料中的value
public V setValue() 普通 修改資料中的value

Map介面中定義了一個方法:public Set<Map.Entry<K, V>> entrySet()
使用此方法輸出Map集合的操作如下:

  1. 利用entrySet()方法將Map介面資料中的資料轉換為Set介面例項進行儲存。
  2. 利用Set介面中的iterator()方法將Set集合轉換為Iterator介面例項。
  3. 利用Iterator介面進行迭代輸出。

利用Iterator實現Map介面輸出

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class TestOutput {

    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("a", 1);
        map.put("b", 2);
        map.put("c", 3);
        map.put("d", 4);
        // 將Map集合轉換為Set集合,以使用itertor()方法,注意泛型統一
        Set<Map.Entry<String, Integer>> set = map.entrySet();
        //取得Iterator介面例項
        Iterator<Map.Entry<String, Integer>> iterator = set.iterator();
        while (iterator.hasNext()) {
            //每一次迭代取得的都是Map.Entry介面例項,以進行key和value的分離
            Map.Entry<String, Integer> me = iterator.next();
            System.out.println(me.getKey() + "--->>" + me.getValue());
        }
    }
}

自定義Map集合的key型別

作為key的自定義的類必須覆寫hasCode()和equals()兩個方法,以確定元素是否重複。