1. 程式人生 > >Map深入學習(一)Map介面簡介

Map深入學習(一)Map介面簡介

 Map使用鍵值對來儲存資料。Map是一個介面,定義了對資料的增刪改查,替換和比較等等基本的操作。
      Map內部定義了一個內部介面Entry,可以通過MapSet<Map.Entry<K, V>> entrySet()來獲取Entry物件。

Map怎麼判斷鍵值(key)是否存在呢?看看原始碼的實現

default V putIfAbsent(K key, V value) {
        V v = get(key);
        if (v == null) {
            v = put(key, value);
        }

        return
v; } 這個方法是jdk1.8引入的,用來判斷Map中是否存在給定key值。

Map的獲取key的方法和獲取value的方法沒有具體實現,由子類去實現

  V get(Object key);
  V put(K key, V value);

下面列出Map中沒有具體實現的方法

 int size();//獲取集合長度
 boolean isEmpty();//判斷集合是否為空
 boolean containsValue(Object value);//判斷集合是否含有給定值
 V remove(Object key);//刪除集合給定值
 void putAll(Map<? extends K, ? extends V> m)
;//新增一個集合元素 void clear();//清空集合 Set<K> keySet(); Collection<V> values();//獲取集合全部值 boolean equals(Object o); int hashCode();

實際上,Map裡面的資料是由內部介面Entry來維護的,即所有資料都是經過Entry來儲存,看看Map裡面介面實現

   interface Entry<K,V> {
        V getValue();
        V setValue(V value);
        boolean equals(Object o);
        int
hashCode(); public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K,V>> comparingByKey() { return (Comparator<Map.Entry<K, V>> & Serializable) (c1, c2) -> c1.getKey().compareTo(c2.getKey()); } public static <K, V extends Comparable<? super V>> Comparator<Map.Entry<K,V>> comparingByValue() { return (Comparator<Map.Entry<K, V>> & Serializable) (c1, c2) -> c1.getValue().compareTo(c2.getValue()); } public static <K, V> Comparator<Map.Entry<K, V>> comparingByKey(Comparator<? super K> cmp) { Objects.requireNonNull(cmp); return (Comparator<Map.Entry<K, V>> & Serializable) (c1, c2) -> cmp.compare(c1.getKey(), c2.getKey()); } public static <K, V> Comparator<Map.Entry<K, V>> comparingByValue(Comparator<? super V> cmp) { Objects.requireNonNull(cmp); return (Comparator<Map.Entry<K, V>> & Serializable) (c1, c2) -> cmp.compare(c1.getValue(), c2.getValue()); } }

Entry可以設定鍵值和獲取鍵值。