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 对象的字符串表示形式。

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