标题：AbstractMap
简介
所有已实现的接口： 
Map<K,V> 
直接已知子类： 
ConcurrentHashMap, EnumMap, HashMap, IdentityHashMap, TreeMap, WeakHashMap 
--------------------------------------------------------------------------------
public abstract class AbstractMap<K,V>extends Objectimplements Map<K,V>要实现不可修改的映射，程序员只需扩展此类并提供 entrySet 方法的实现即可，该方法将返回映射的映射关系 Set 视图。通常，返回的 Set 将依次在 AbstractSet 上实现。此 Set 不支持 add 或 remove 方法，其迭代器也不支持 remove 方法。
要实现可修改的映射，程序员还必须另外重写此类的 put 方法（否则将抛出 UnsupportedOperationException），并且由 entrySet().iterator() 所返回的迭代器必须另外实现其 remove 方法。
按照 Map 接口规范中的推荐，程序员通常应该提供一个 void（无参数）构造方法和 map 构造方法。
此类中每个非抽象方法的文档详细描述了其实现。如果要实现的映射允许更有效的实现，则可以重写这些方法中的每个方法。
此类是 Java Collections Framework 的成员。
版本信息
从以下版本开始： 
1.2 
另请参见：
Map, Collection
--------------------------------------------------------------------------------
嵌套类摘要 
从接口 java.util.Map 继承的嵌套类/接口 
Map.Entry<K,V> 
构造方法摘要 
protected AbstractMap() 
单独的构造方法。 
方法摘要 
void clear() 
从此映射中移除所有映射关系（可选操作）。 
protected Object clone() 
返回此 AbstractMap 实例的浅表复制：不克隆键和值本身。 
boolean containsKey(Object key) 
如果此映射包含指定键的映射关系，则返回 true。 
boolean containsValue(Object value) 
如果此映射将一个或多个键映射到该值，则返回 true。 
abstract Set<Map.Entry<K,V>> entrySet() 
返回包含在此映射中的映射关系的 Set 视图。 
boolean equals(Object o) 
比较指定对象与此映射的相等性。 
V get(Object key) 
返回此映射将指定键映射到的值。 
int hashCode() 
返回此映射的哈希代码值。 
boolean isEmpty() 
如果此映射不包含任何键-值映射关系，则返回 true。 
Set<K> keySet() 
返回包含在此映射中的键的 Set 视图。 
V put(K key, V value) 
将指定的值与此映射中的指定键关联起来（可选操作）。 
void putAll(Map<? extends K,? extends V> t) 
将指定映射的所有映射关系复制到此映射中（可选操作）。 
V remove(Object key) 
如果此映射中存在此键的映射关系，则移除该映射关系（可选操作）。 
int size() 
返回此映射中键-值映射关系的数量。 
String toString() 
返回此映射的字符串表示形式。 
Collection<V> values() 
返回包含在此映射中的值的 collection 视图。 
从类 java.lang.Object 继承的方法 
finalize, getClass, notify, notifyAll, wait, wait, wait
构造方法详细信息
AbstractMap
protected AbstractMap()单独的构造方法。（由子类构造方法调用，通常是隐式的。） 
方法详细信息 
size
public int size()返回此映射中键-值映射关系的数量。如果该映射包含多于 Integer.MAX_VALUE 的元素，则返回 Integer.MAX_VALUE。
此实现返回 entrySet().size()。 
指定者：
接口 Map<K,V> 中的 size
返回：
此映射中键-值映射关系的数量。
--------------------------------------------------------------------------------
isEmpty
public boolean isEmpty()如果此映射不包含任何键-值映射关系，则返回 true。 
此实现返回 size() == 0。 
指定者：
接口 Map<K,V> 中的 isEmpty
返回：
如果此映射不包含任何键-值映射关系，则返回 true。
--------------------------------------------------------------------------------
containsValue
public boolean containsValue(Object value)如果此映射将一个或多个键映射到该值，则返回 true。更正式地说，当且仅当此映射包含至少一个到值 v 的映射关系，并且 (value==null ? v==null : value.equals(v)) 时才返回 true。对于大多数映射实现而言，此操作所需的时间可能与映射的大小呈线性关系。
此实现在 entrySet() 上进行迭代，以搜索带有指定值的项。如果找到这样的项，则返回 true。如果迭代终止，并且没有找到这样的项，则返回 false。注意，此实现所需的时间与映射的大小呈线性关系。 
指定者：
接口 Map<K,V> 中的 containsValue
参数：
value - 将测试此映射中是否存在的值。 
返回：
如果此映射将一个或多个键映射到该值，则返回 true。
--------------------------------------------------------------------------------
containsKey
public boolean containsKey(Object key)如果此映射包含指定键的映射关系，则返回 true。
此实现在 entrySet() 上进行迭代，以搜索带有指定键的项。如果找到这样的项，则返回 true。如果迭代终止，并且没有找到这样的项，则返回 false。注意，此实现所需的时间与映射的大小呈线性关系；许多实现将重写此方法。 
指定者：
接口 Map<K,V> 中的 containsKey
参数：
key - 将测试此映射中是否存在的键。 
返回：
如果此映射包含指定键的映射关系，则返回 true。 
抛出： 
NullPointerException - 如果该键为 null 并且此映射不允许包含 null 键。
--------------------------------------------------------------------------------
get
public V get(Object key)返回此映射将指定键映射到的值。如果该映射不包含此键的映射关系，则返回 null。返回值 null 不一定 表明该映射不包含该键的映射关系；也可能是该映射显式地将该键映射到 null。可以使用 containsKey 操作来区分这两种情况。
此实现在 entrySet() 上进行迭代，以搜索带有指定键的项。如果找到这样的项，则返回该项的值。如果迭代终止，并且没有找到这样的项，则返回 null。注意，此实现所需的时间与映射的大小呈线性关系；许多实现将重写此方法。 
指定者：
接口 Map<K,V> 中的 get
参数：
key - 与返回值关联的键。 
返回：
此映射将指定键映射到的值。 
抛出： 
NullPointerException - 如果键为 null 并且此映射不允许包含 null 键。
另请参见：
containsKey(Object)
--------------------------------------------------------------------------------
put
public V put(K key,
V value)将指定的值与此映射中的指定键关联起来（可选操作）。如果映射以前包含此键的映射关系，则替换旧的值。
此实现始终抛出 UnsupportedOperationException。 
指定者：
接口 Map<K,V> 中的 put
参数：
key - 将与指定值关联的键。
value - 将与指定键关联的值。 
返回：
指定键以前的关联值。如果没有该键的映射关系，则返回 null。（如果该实现支持 null 值，则返回 null 也可以表明该映射以前将 null 与指定键相关联。） 
抛出： 
UnsupportedOperationException - 如果此映射不支持 put 操作。 
ClassCastException - 如果指定键或值的类不允许它存储在此映射中。 
IllegalArgumentException - 如果此键或值 * 的某方面不允许它存储在此映射中。 
NullPointerException - 如果此映射不允许 null 键或值，并且指定键或值为 null。
--------------------------------------------------------------------------------
remove
public V remove(Object key)如果此映射中存在此键的映射关系，则移除该映射关系（可选操作）。
此实现在 entrySet() 上进行迭代，以搜索带有指定键的项。如果找到这样的项，则通过 getValue 操作获得该项的值，然后使用迭代器的 remove 操作从 Collection（以及底层映射）中移除该项，并返回保存的值。如果迭代终止，并且没有找到这样的项，则返回 null。注意，此实现所需要时间与映射大小呈线性关系；许多实现将重写此方法。
注意，如果 entrySet 迭代器不支持 remove 方法并且此映射包含指定键的映射关系，则此实现会抛出 UnsupportedOperationException。 
指定者：
接口 Map<K,V> 中的 remove
参数：
key - 将从映射中移除其映射关系的键。 
返回：
指定键以前的关联值。如果没有该键的项，则返回 null。（如果该实现支持 null 值，则返回 null 也可以表明该映射以前将 null 与指定键相关联。） 
抛出： 
UnsupportedOperationException - 如果此映射不支持 remove 操作。
--------------------------------------------------------------------------------
putAll
public void putAll(Map<? extends K,? extends V> t)将指定映射的所有映射关系复制到此映射中（可选操作）。这些映射关系将替代此映射中已有的，并且指定映射中目前也存在的所有键的映射关系。
此实现在指定映射的 entrySet() 集合上进行迭代，并对迭代返回的每一项调用一次此映射的 put 操作。
注意，如果此映射不支持 put 操作，并且指定映射为非空，则此实现会抛出 UnsupportedOperationException。 
指定者：
接口 Map<K,V> 中的 putAll
参数：
t - 要存储在此映射中的映射关系。 
抛出： 
UnsupportedOperationException - 如果此映射不支持 putAll 操作。 
ClassCastException - 如果指定映射中的键或值的类不允许它存储在此映射中。 
IllegalArgumentException - 如果指定映射中的键或值的某方面不允许它存储在此映射中。 
NullPointerException - 如果指定的映射为 null，或者如果此映射不允许 null 键或值，但指定的映射包含了 null 键或值。
--------------------------------------------------------------------------------
clear
public void clear()从此映射中移除所有映射关系（可选操作）。
此实现调用 entrySet().clear()。 注意，如果 entrySet 不支持 clear 操作，则此实现会抛出 UnsupportedOperationException。 
指定者：
接口 Map<K,V> 中的 clear
抛出： 
UnsupportedOperationException - 此映射不支持 clear 操作。
--------------------------------------------------------------------------------
keySet
public Set<K> keySet()返回包含在此映射中的键的 Set 视图。该 Set 受映射的支持，所以对映射的更改反映在 Set 中，反之亦然。（如果在对 Set 进行迭代的同时修改映射，则迭代的结果是不明确的。）Set 支持元素移除，即通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作从映射中移除相应的项。 它不支持 add 或 addAll 操作。
此实现返回一个为 AbstractSet 创建子类的 Set。子类的 iterator 方法通过此映射的 entrySet() 迭代器返回一个“包装器对象”。size 方法委托给此映射的 size 方法，而 contains 方法委托给此映射的 containsKey 方法。
Set 是在第一次调用此方法时创建的，并为响应所有后续调用而返回。 因为不执行同步操作，所以对此方法的多个调用很少返回不同的 Set。 
指定者：
接口 Map<K,V> 中的 keySet
返回：
包含在此映射中的键的 Set 视图。
--------------------------------------------------------------------------------
values
public Collection<V> values()返回包含在此映射中的值的 collection 视图。该 collection 受映射的支持，所以对映射的更改反映在 collection 中，反之亦然。（如果在对 collection 进行迭代的同时修改映射，则迭代的结果是不明确的。）collection 支持元素移除，即通过 Iterator.remove、Collection.remove、removeAll、retainAll 和 clear 操作从映射中移除相应的项。它不支持 add 或 addAll 操作。
此实现返回一个为抽象 collection 创建子类的 collection。子类的 iterator 方法通过此映射的 entrySet() 迭代器返回一个“包装器对象”。size 方法委托给此映射的 size 方法，而 contains 方法委托给此映射的 containsValue 方法。
collection 是在第一次调用此方法时创建的，并为响应所有后续调用而返回。因为不执行同步操作，所以对此方法的多个调用很少返回不同的 Collection。 
指定者：
接口 Map<K,V> 中的 values
返回：
包含在此映射中的值的 collection 视图。
--------------------------------------------------------------------------------
entrySet
public abstract Set<Map.Entry<K,V>> entrySet()返回包含在此映射中的映射关系的 Set 视图。此 Set 的每一个元素都是一个 Map.Entry。该 Set 受映射的支持，所以对映射的更改反映在 Set 中，反之亦然。（如果在对 Set 进行迭代的同时修改映射，则迭代的结果是不明确的。）Set 支持元素移除，即通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作从映射中移除相应的项。它不支持 add 或 addAll 操作。 
指定者：
接口 Map<K,V> 中的 entrySet
返回：
包含在此映射中的映射关系的 Set 视图。
--------------------------------------------------------------------------------
equals
public boolean equals(Object o)比较指定对象与此映射的相等性。如果给定对象也是一个映射并且两个映射表示相同的映射关系，则返回 true。更正式地说，如果 t1.keySet().equals(t2.keySet()) 并且对于每一个 t1.keySet() 中的键 k 都存在 (t1.get(k)==null ? t2.get(k)==null :t1.get(k).equals(t2.get(k)))，则两个映射 t1 和 t2 表示相同的映射关系 。这可以确保 equals 方法在 map 接口的不同实现中正常工作。
此实现首先检查指定的对象是否为此映射；如果是，则返回 true。然后，它将检查指定的对象是否是一个大小与此 set 的大小相等的映射；如果不是，则返回 false。如果是，则在此映射的 entrySet 集合上进行迭代，并检查指定的映射是否包含此映射所包含的每个映射关系。如果指定的映射中不包含这样的映射关系，则返回 false。如果迭代完成，则返回 true。 
指定者：
接口 Map<K,V> 中的 equals
覆盖：
类 Object 中的 equals
参数：
o - 要与此映射进行相等性比较的对象。 
返回：
如果指定的对象等于此映射，则返回 true。
另请参见：
Object.hashCode(), Hashtable
--------------------------------------------------------------------------------
hashCode
public int hashCode()返回此映射的哈希代码值。映射的哈希代码被定义为该映射的 entrySet() 视图中每一项的哈希代码的总和。这确保了 t1.equals(t2) 对于任意两个映射 t1 和 t2 都意味着 t1.hashCode()==t2.hashCode()，正如 Object.hashCode 的常规协定所要求的。
此实现在 entrySet() 上进行迭代，对 Collection 中的每个元素（项）调用 hashCode，并合计结果。 
指定者：
接口 Map<K,V> 中的 hashCode
覆盖：
类 Object 中的 hashCode
返回：
此映射的哈希代码值。
另请参见：
Map.Entry.hashCode(), Object.hashCode(), Object.equals(Object), Set.equals(Object)
--------------------------------------------------------------------------------
toString
public String toString()返回此映射的字符串表示形式。该字符串表示形式由键-值映射关系的一个列表组成，此列表是按照映该射 entrySet 视图的迭代器返回的顺序排列的，并用括号 ("{}") 括起来。相邻的映射关系是用字符 ", "（逗号加空格）分隔的。每个键-值映射关系按以下方式呈现：键，后面是一个等号 ("=")，再后面是相关联的值。键和值都通过 String.valueOf(Object) 转换为字符串。
此实现会创建一个空的字符串缓冲区，追加一个左括号，然后在映射的 entrySet 视图上进行迭代，依次追加每个 map.entry 的字符串表示形式。每追加一项后（最后一项除外），将追加字符串 ", "。最后，追加一个右括号。从字符串缓冲区中获得一个字符串并返回它。 
覆盖：
类 Object 中的 toString
返回：
此映射的字符串表示形式。
--------------------------------------------------------------------------------
clone
protected Object clone()
throws CloneNotSupportedException返回此 AbstractMap 实例的浅表复制：不克隆键和值本身。 
覆盖：
类 Object 中的 clone
返回：
此映射的浅表复制。 
抛出： 
CloneNotSupportedException - 如果对象的类不支持 Cloneable 接口，则重写 clone 方法的子类也会抛出此异常，以指示无法克隆某个实例。
另请参见：
Cloneable