Java 集合(四)Map詳解

  Map是一種特殊的集合形式,是一種將鍵映射到值的對象。一個映射不能包含重複的鍵;每個鍵最多隻能映射到一個值。 Map 接口提供三種collection 視圖,允許以鍵集、值集或鍵-值映射關係集的形式查看某個映射的內容。
  在Map模塊的學習中,可以主要關注5個類(或接口),主要繼承關係如下:

  這6個就是要基本掌握的所有Map所有內容。

一、Map

  Map是一個獨立接口(interface)

1.1、添加元素

  1>public V put(K key, V value)
   將指定的值與此映射中的指定鍵關聯。如果此映射以前包含一個該鍵的映射關係,則用指定值替換舊值。
  2>public void putAll(Map<? extends K,? extends V> map)
   從指定映射中將所有映射關係複製到此映射中。

1.2、其他方法

  1>public void clear()
   從此映射中移除所有映射關係。
  2>public boolean containsKey(Object key)
   如果此映射包含指定鍵的映射關係,則返回 true。更確切地講,當且僅當此映射包含針對滿足 (key == null ? k == null : key.equals(k)) 的鍵 k 的映射關係時,返回 true。
  3>public boolean containsValue(Object value)
   如果此映射將一個或多個鍵映射到指定值,則返回 true。更確切地講,當且僅當此映射至少包含一個對滿足 (value == null ? v == null : value.equals(v)) 的值 v 的映射關係時,返回 true。
  4>public Set<Map.Entry<K,V>> entrySet()
   返回此映射中包含的映射關係的 Set 視圖。
  5>public boolean equals(Object object)
   比較指定的對象與此映射是否相等。如果給定的對象也是一個映射,並且這兩個映射表示相同的映射關係,則返回 true。
  6>public V get(Object key)
   返回指定鍵所映射的值;如果此映射不包含該鍵的映射關係,則返回 null。 更確切地講,如果此映射包含滿足 (key == null ? k == null : key.equals(k)) 的鍵 k 到值 v 的映射關係,則此方法返回 v;否則返回 null。
  7>public int hashCode()
   返回此映射的哈希碼值。映射的哈希碼定義爲此映射 entrySet() 視圖中每個項的哈希碼之和。這確保 m1.equals(m2) 對於任意兩個映射 m1 和 m2 而言,都意味着 m1.hashCode() == m2.hashCode() 。
  8>public boolean isEmpty()
    如果此映射未包含鍵-值映射關係,則返回 true。
  9>public Set keySet()
   返回此映射中包含的鍵的 Set 視圖。
  10>public V remove(Object key)
   如果存在一個鍵的映射關係,則將其從此映射中移除(可選操作)。更確切地講,如果此映射包含從滿足 (key == null ? k == null :key.equals(k)) 的鍵 k 到值 v 的映射關係,則移除該映射關係 。
  11>public int size()
   返回此映射中的鍵-值映射關係數。如果該映射包含的元素大於 Integer.MAX_VALUE,則返回 Integer.MAX_VALUE。
  12>public Collection values()
   返回此映射中包含的值的 Collection 視圖。

二、AbstractMap

  AbstractMap是一個抽象類,實現Map接口。

2.1、添加元素

  1>public V put(K key, V value)
   將指定的值與此映射中的指定鍵關聯。
  2>public void putAll(Map<? extends K, ? extends V> map)
   從指定映射中將所有映射關係複製到此映射中。

2.2、其他方法

  1>protected AbstractMap()
   空構造函數。
  2>public void clear()
   從此映射中移除所有映射關係。
  3>public boolean containsKey(Object key)
   如果此映射包含指定鍵的映射關係,則返回 true。更確切地講,當且僅當此映射包含針對滿足 (key == null ? k == null : key.equals(k)) 的鍵 k 的映射關係時,返回 true。
  4>public boolean containsValue(Object value)
   如果此映射將一個或多個鍵映射到指定值,則返回 true。更確切地講,當且僅當此映射至少包含一個對滿足 (value == null ? v == null : value.equals(v)) 的值 v 的映射關係時,返回 true。
  5>public abstract Set<Map.Entry<K, V>> entrySet()
   返回此映射中包含的映射關係的 Set 視圖。
  6>public boolean equals(Object object)
   比較指定對象與此映射的相等性。如果給定對象也是一個映射並且兩個映射表示相同的映射關係,則返回 true。更確切地講,如果 m1.entrySet().equals(m2.entrySet()),則兩個映射 m1 和 m2 表示相同的映射關係。
  7>public V get(Object key)
   返回指定鍵所映射的值;如果此映射不包含該鍵的映射關係,則返回 null。 更確切地講,如果此映射包含滿足 (key == null ? k == null : key.equals(k)) 的鍵 k 到值 v 的映射關係,則此方法返回 v;否則返回 null 。
  8>public int hashCode()
   返回此映射的哈希碼值。
  9>public boolean isEmpty()
   如果此映射未包含鍵-值映射關係,則返回 true 。
  10>public Set keySet()
   返回此映射中包含的鍵的 Set 視圖。
  11>public V remove(Object key)
   如果存在一個鍵的映射關係,則將其從此映射中移除(可選操作)。更確切地講,如果此映射包含從滿足 (key == null ? k == null :key.equals(k)) 的鍵 k 到值 v 的映射關係,則移除該映射關係。
  12> public int size()
    返回此映射中的鍵-值映射關係數。如果該映射包含的元素大於 Integer.MAX_VALUE,則返回 Integer.MAX_VALUE。
  13>public String toString()
   返回此映射的字符串表示形式。
  14>public Collection values()
   返回此映射中包含的值的 Collection 視圖。
  15>protected Object clone()
   返回此 AbstractMap 實例的淺表副本。

三、HashMap

  HashMap繼承AbstractMap接口,HashMap由數組+鏈表組成的,數組是HashMap的主體,鏈表則是主要爲了解決哈希衝突而存在的。HashMap允許使用 null 值和 null 鍵。
  HashMap 的實例有兩個參數影響其性能:初始容量 和加載因子。容量 是哈希表中桶的數量,初始容量只是哈希表在創建時的容量。加載因子 是哈希表在其容量自動增加之前可以達到多滿的一種尺度。當哈希表中的條目數超出了加載因子與當前容量的乘積時,則要對該哈希表進行 rehash 操作(即重建內部數據結構),從而哈希表將具有大約兩倍的桶數。
  通常,默認加載因子 (0.75) 在時間和空間成本上尋求一種折衷。加載因子過高雖然減少了空間開銷,但同時也增加了查詢成本(在大多數 HashMap 類的操作中,包括 get 和 put 操作,都反映了這一點)。在設置初始容量時應該考慮到映射中所需的條目數及其加載因子,以便最大限度地減少 rehash 操作次數。如果初始容量大於最大條目數除以加載因子,則不會發生 rehash 操作。
  HashMap是不同步的。

3.1、構造方法

  1>public HashMap()
   構造一個具有默認初始容量 (16) 和默認加載因子 (0.75) 的空 HashMap.
  2>public HashMap(int capacity)
   構造一個帶指定初始容量和默認加載因子 (0.75) 的空 HashMap.
  3>public HashMap(int capacity, float loadFactor)
   構造一個帶指定初始容量和加載因子的空 HashMap.
  4>public HashMap(Map<? extends K, ? extends V> map)
   構造一個映射關係與指定 Map 相同的新 HashMap.

3.2、其他方法

  1>public Object clone()
   返回此 HashMap 實例的淺表副本。
  2>public boolean isEmpty()
   如果此映射不包含鍵-值映射關係,則返回 true。
  3>public int size()
   返回此映射中的鍵-值映射關係數。
  4>public V get(Object key)
   返回指定鍵所映射的值;如果對於該鍵來說,此映射不包含任何映射關係,則返回 null。 更確切地講,如果此映射包含一個滿足 (key == null ? k == null : key.equals(k)) 的從 k 鍵到 v 值的映射關係,則此方法返回 v;否則返回 null 。
  5>public boolean containsKey(Object key)
   如果此映射包含對於指定鍵的映射關係,則返回 true。
  6>public boolean containsValue(Object value)
    如果此映射將一個或多個鍵映射到指定值,則返回 true。
  7>public V put(K key, V value)
   在此映射中關聯指定值與指定鍵。如果該映射以前包含了一個該鍵的映射關係,則舊值被替換,並將舊值返回。如果不含映射關係,則返回null。
  8>public void putAll(Map<? extends K, ? extends V>
   將指定映射的所有映射關係複製到此映射中,這些映射關係將替換此映射目前針對指定映射中所有鍵的所有映射關係。
  9>public V remove(Object key)
   從此映射中移除指定鍵的映射關係(如果存在),返回對應的value;如果不存在,則返回null。
  10>public void clear()
   從此映射中移除所有映射關係。
  11>public Set keySet()
   返回此映射中所包含的鍵的 Set 視圖 。
  12>public Collection values()
   返回此映射所包含的值的 Collection 視圖 。
  13>public Set<Entry<K, V>> entrySet()
   返回此映射所包含的映射關係的 Set 視圖。

四、LinkedHashMap

  LinkedHashMap繼承HashMap,是Map 接口的哈希表和鏈接列表實現。

4.1、構造方法

  1>public LinkedHashMap()
    構造一個帶默認初始容量 (16) 和加載因子 (0.75) 的空插入順序 LinkedHashMap 實例。
  2>public LinkedHashMap(int initialCapacity)
   構造一個帶指定初始容量和默認加載因子 (0.75) 的空插入順序 LinkedHashMap 實例。
  3>public LinkedHashMap(int initialCapacity, float loadFactor)
   構造一個帶指定初始容量和加載因子的空插入順序 LinkedHashMap 實例。
  4>public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
   構造一個帶指定初始容量、加載因子和排序模式的空 LinkedHashMap 實例。
  5>public LinkedHashMap(Map<? extends K, ? extends V> map)
   構造一個映射關係與指定映射相同的插入順序 LinkedHashMap 實例。所創建的 LinkedHashMap 實例具有默認的加載因子 (0.75) 和足以容納指定映射中映射關係的初始容量。

4.2、其他方法

  1>public Entry<K, V> eldest()
   返回最舊的映射。
  2>public V get(Object key)
   返回此映射到指定鍵的值。如果此映射中沒有該鍵的映射關係,則返回 null 。 更確切地講,如果此映射包含滿足 (key == null ? k == null : key.equals(k)) 的從鍵 k 到值 v 的映射關係,則此方法返回 v;否則,返回 null。
  3>public boolean containsValue(Object value)
   如果此映射將一個或多個鍵映射到指定值,則返回 true。
  4>public void clear()
   從該映射中移除所有映射關係。

五、TreeMap

  TreeMap繼承AbstractMap,實現SortedMap接口,基於紅黑樹(Red-Black tree)的 NavigableMap 實現。該映射根據其鍵的自然順序進行排序,或者根據創建映射時提供的 Comparator 進行排序,具體取決於使用的構造方法。
  TreeMap是不同步的。

5.1、構造方法

  1>public TreeMap()
   使用鍵的自然順序構造一個新的、空的樹映射。插入該映射的所有鍵都必須實現 Comparable 接口。
  2>public TreeMap(Map<? extends K, ? extends V> copyFrom)
    構造一個與給定映射具有相同映射關係的新的樹映射,該映射根據其鍵的自然順序 進行排序。插入此新映射的所有鍵都必須實現 Comparable 接口。
  3>public TreeMap(Comparator<? super K> comparator)
   構造一個新的、空的樹映射,該映射根據給定比較器進行排序。插入該映射的所有鍵都必須由給定比較器進行相互比較 。
  4>public TreeMap(SortedMap<K, ? extends V> copyFrom)
   構造一個與指定有序映射具有相同映射關係和相同排序順序的新的樹映射。

5.2、獲取元素

  1>public V get(Object key)
   返回指定鍵所映射的值,如果對於該鍵而言,此映射不包含任何映射關係,則返回 null。 更確切地講,如果此映射包含從鍵 k 到值 v 的映射關係,根據該映射的排序 key 比較起來等於 k,那麼此方法將返回v;否則返回 null 。
  2>public Entry<K, V> firstEntry()
   返回一個與此映射中的最小鍵關聯的鍵-值映射關係;如果映射爲空,則返回 null。
  3>public Entry<K, V> pollFirstEntry()
   移除並返回與此映射中的最小鍵關聯的鍵-值映射關係;如果映射爲空,則返回 null 。
  4>public K firstKey()
   返回此映射中當前第一個(最低)鍵。
  5>public Entry<K, V> lastEntry()
   返回映射中當前最後一個(最高)鍵。
  6>public Entry<K, V> pollLastEntry()
   移除並返回與此映射中的最大鍵關聯的鍵-值映射關係;如果映射爲空,則返回 null 。
  7>public K lastKey()
   返回映射中當前最後一個(最高)鍵。
  8>public Entry<K, V> lowerEntry(K key)
   返回一個鍵-值映射關係,它與嚴格小於給定鍵的最大鍵關聯;如果不存在這樣的鍵,則返回 null 。
  9>public K lowerKey(K key)
   返回嚴格小於給定鍵的最大鍵;如果不存在這樣的鍵,則返回 null 。
  10>public Entry<K, V> floorEntry(K key)
   返回一個鍵-值映射關係,它與小於等於給定鍵的最大鍵關聯;如果不存在這樣的鍵,則返回 null。
  11>public K floorKey(K key)
   返回小於等於給定鍵的最大鍵;如果不存在這樣的鍵,則返回 null 。
  12> public Entry<K, V> ceilingEntry(K key)
   返回一個鍵-值映射關係,它與大於等於給定鍵的最小鍵關聯;如果不存在這樣的鍵,則返回 null。
  13>public K ceilingKey(K key)
   返回大於等於給定鍵的最小鍵;如果不存在這樣的鍵,則返回 null 。
  14>public Entry<K, V> higherEntry(K key)
   返回一個鍵-值映射關係,它與嚴格大於給定鍵的最小鍵關聯;如果不存在這樣的鍵,則返回 null。
  15>public K higherKey(K key)
   返回嚴格大於給定鍵的最小鍵;如果不存在這樣的鍵,則返回 null 。

5.3、其他方法

  1>public Object clone()
   返回此 TreeMap 實例的淺表副本。
  2> public int size()
   返回此映射中的鍵-值映射關係數 。
  3>public boolean isEmpty()
    size是否爲0。
  4>public boolean containsKey(Object key)
   如果此映射包含指定鍵的映射關係,則返回 true。
  5>public V put(K key, V value)
   將指定值與此映射中的指定鍵進行關聯。如果該映射以前包含此鍵的映射關係,那麼將替換舊值 。
  6>public void clear()
   從此映射中移除所有映射關係。
  7>public V remove(Object key)
   如果此 TreeMap 中存在該鍵的映射關係,則將其刪除。
  8>public Comparator<? super K> comparator()
   返回對此映射中的鍵進行排序的比較器;如果此映射使用鍵的自然順序,則返回 null 。
  9>public Set<Entry<K, V>> entrySet()
   返回此映射中包含的映射關係的 Set 視圖。
  10>public Set keySet()
   返回此映射包含的鍵的 Set 視圖。
  11>public NavigableSet navigableKeySet()
    返回此映射中所包含鍵的 NavigableSet 視圖。
  12>public NavigableMap<K, V> subMap(K from, boolean fromInclusive, K to, boolean toInclusive)
   返回此映射的部分視圖,其鍵的範圍從 fromKey 到 toKey。如果 fromKey 和 toKey 相等,則返回的映射爲空。
  13>public SortedMap<K, V> subMap(K fromInclusive, K toExclusive)
   返回此映射的部分視圖,其鍵值的範圍從 fromKey(包括)到 toKey(不包括)。如果 fromKey 和 tokey 相等,則返回映射爲空 。
  14>public NavigableMap<K, V> headMap(K to, boolean inclusive)
   返回此映射的部分視圖,其鍵小於(或等於,如果 inclusive 爲 true)toKey。
  15>public SortedMap<K, V> headMap(K toExclusive)
   返回此映射的部分視圖,其鍵值嚴格小於 toKey。
  16>public NavigableMap<K, V> tailMap(K from, boolean inclusive)
   返回此映射的部分視圖,其鍵大於(或等於,如果 inclusive 爲 true)fromKey。
  17>public SortedMap<K, V> tailMap(K fromInclusive)
   返回此映射的部分視圖,其鍵大於等於 fromKey 。
  18>public NavigableMap<K, V> descendingMap()
   返回此映射中所包含映射關係的逆序視圖。
  19>public NavigableSet descendingKeySet()
    返回此映射中所包含鍵的逆序 NavigableSet 視圖。

六、Hashtable

  Hashtable繼承Dictionary,實現Map接口。
  Hashtable是同步的。

6.1、構造方法

  1>public Hashtable()
    用默認的初始容量 (11) 和加載因子 (0.75) 構造一個新的空哈希表。
  2>public Hashtable(int capacity)
    用指定初始容量和默認的加載因子 (0.75) 構造一個新的空哈希表。
  3>public Hashtable(int capacity, float loadFactor)
    用指定初始容量和指定加載因子構造一個新的空哈希表 。
  4>public Hashtable(Map<? extends K, ? extends V> map)
    構造一個與給定的 Map 具有相同映射關係的新哈希表。該哈希表是用足以容納給定 Map 中映射關係的初始容量和默認的加載因子(0.75)創建的。

6.2、其他方法

  1>public synchronized Object clone()
    創建此哈希表的淺表副本。複製哈希表自身的所有結構,但不復制它的鍵和值。
  2>public synchronized boolean isEmpty()
    測試此哈希表是否沒有鍵映射到值。
  3> public synchronized int size()
    返回此哈希表中的鍵的數量。
  4>public synchronized V get(Object key)
    返回指定鍵所映射到的值,如果此映射不包含此鍵的映射,則返回 null。更確切地講,如果此映射包含滿足 (key.equals(k)) 的從鍵 k 到值 v 的映射,則此方法返回 v;否則,返回 null。
  5> public synchronized boolean containsKey(Object key)
    測試指定對象是否爲此哈希表中的鍵。
  6>public synchronized boolean containsValue(Object value)
    如果此 Hashtable 將一個或多個鍵映射到此值,則返回 true。
  7>public boolean contains(Object value)
    判斷是否包含指定value。
  8>public synchronized V put(K key, V value)
    將指定 key 映射到此哈希表中的指定 value。鍵和值都不可以爲 null 。
  9>public synchronized void putAll(Map<? extends K, ? extends V> map)
    將指定映射的所有映射關係複製到此哈希表中。
  10>public synchronized V remove(Object key)
    從哈希表中移除該鍵及其相應的值。
  11>public synchronized void clear()
    將此哈希表清空。
  12>public synchronized Set keySet()
    返回此映射中包含的鍵的 Set 視圖 。
  13>public synchronized Collection values()
    返回此映射中包含的鍵的 Collection 視圖 。
  14>public synchronized Set<Entry<K, V>> entrySet()
    返回此映射中包含的鍵的 Set 視圖。
  15> public synchronized Enumeration keys()
    返回此哈希表中的鍵的枚舉。
  16>public synchronized Enumeration elements()
    返回此哈希表中的值的枚舉。
  17>public synchronized boolean equals(Object object)
    按照 Map 接口的定義,比較指定 Object 與此 Map 是否相等。
  18>public synchronized int hashCode()
    按照 Map 接口的定義,返回此 Map 的哈希碼值 。
  19>public synchronized String toString()
    返回此 Hashtable 對象的字符串表示形式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章