public abstract class AbstractMap
extends Object
implements Map<K, V>
java.lang.Object | |
↳ | java.util.AbstractMap<K, V> |
Known Direct Subclasses
ConcurrentHashMap<K, V>,
ConcurrentSkipListMap<K, V>,
EnumMap<K extends
Enum<K>, V>,
HashMap<K, V>,
IdentityHashMap<K, V>,
TreeMap<K, V>,
WeakHashMap<K, V>
|
Known Indirect Subclasses
LinkedHashMap<K, V>
|
该类提供了 Map接口的骨架实现,以尽量减少实现此接口所需的工作量。
为了实现一个不可修改的地图,程序员只需要扩展这个类并为entrySet方法提供一个实现,该方法返回地图映射的set-view。 通常,返回的集合将依次在AbstractSet之上实现 。 该集不应该支持add或remove方法,其迭代器不应该支持remove方法。
为了实现可修改的映射,程序员必须另外重写此类的 put方法(否则将引发 UnsupportedOperationException ),并且由 entrySet().iterator()返回的迭代器必须另外实现其 remove方法。
根据 Map接口规范中的建议,程序员通常应该提供一个void(无参数)和map构造函数。
这个类中每个非抽象方法的文档都详细描述了它的实现。 如果正在实施的地图允许更有效的实施,则可以重写这些方法中的每一个。
本课是 Java Collections Framework的成员。
也可以看看:
Nested classes |
|
---|---|
class |
AbstractMap.SimpleEntry<K, V> 一个维护一个键和一个值的条目。 |
class |
AbstractMap.SimpleImmutableEntry<K, V> 一个条目维护一个不可变的键和值。 |
Protected constructors |
|
---|---|
AbstractMap() 唯一的构造函数。 |
Public methods |
|
---|---|
void |
clear() 从该映射中删除所有映射(可选操作)。 这个实现调用 entrySet().clear() 。 |
boolean |
containsKey(Object key) 如果此映射包含指定键的映射,则返回 该实现迭代 entrySet()以指定的键搜索条目。 |
boolean |
containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 该实现迭代 entrySet()以搜索具有指定值的条目。 |
abstract Set<Entry<K, V>> |
entrySet() 返回此映射中包含的映射的 |
boolean |
equals(Object o) 将指定的对象与此映射进行比较以获得相等性。 |
V |
get(Object key) 返回指定键映射到的值,或者如果此映射不包含键映射,则返回 此实现迭代 entrySet()以指定键搜索条目。 |
int |
hashCode() 返回此映射的哈希码值。 |
boolean |
isEmpty() 如果此映射不包含键 - 值映射,则返回 该实现返回 size() == 0 。 |
Set<K> |
keySet() 返回包含在此映射中的键的 该实现返回一个子类为 |
V |
put(K key, V value) 将指定的值与此映射中指定的键关联(可选操作)。 这个实现总是抛出一个 UnsupportedOperationException 。 |
void |
putAll(Map<? extends K, ? extends V> m) 将指定映射中的所有映射复制到此映射(可选操作)。 该实现迭代指定地图的 entrySet()集合,并为迭代返回的每个条目调用此映射的 put操作一次。 |
V |
remove(Object key) 如果该映射存在,则从该映射中除去该映射(可选操作)。 该实现迭代 entrySet()以指定的键搜索条目。 |
int |
size() 返回此映射中键 - 值映射的数量。 该实现返回 entrySet().size() 。 |
String |
toString() 返回此映射的字符串表示形式。 |
Collection<V> |
values() 返回此映射中包含的值的 此实现返回一个集合,该集合的子类为 |
Protected methods |
|
---|---|
Object |
clone() 返回此 AbstractMap实例的浅表副本:键和值本身未被克隆。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface java.util.Map
|
void clear ()
从该映射中删除所有映射(可选操作)。 此通话返回后,地图将为空。
这个实现调用 entrySet().clear() 。
注意,此实现抛出 UnsupportedOperationException如果 entrySet不支持 clear操作。
Throws | |
---|---|
UnsupportedOperationException |
boolean containsKey (Object key)
如果此映射包含指定键的映射,则返回true
。 更正式地,返回true
当且仅当该映射包含密钥k
的映射,例如Objects.equals(key, k)
。 (最多可以有一个这样的映射。)
该实现迭代entrySet()以指定的键搜索条目。 如果找到这样的条目,则返回true 。 如果迭代终止而没有找到这样的条目,则返回false 。 请注意,此实现需要地图大小的线性时间; 许多实现将覆盖此方法。
Parameters | |
---|---|
key |
Object : key whose presence in this map is to be tested |
Returns | |
---|---|
boolean |
true if this map contains a mapping for the specified key |
Throws | |
---|---|
ClassCastException |
|
NullPointerException |
boolean containsValue (Object value)
如果此映射将一个或多个键映射到指定值,则返回true
。 更正式地,返回true
当且仅当该映射包含至少一个映射到值v
以至于Objects.equals(value, v)
。 对于Map
接口的大多数实现,此操作可能需要时间线性地图大小。
这个实现迭代entrySet()搜索具有指定值的条目。 如果找到这样的条目,则返回true 。 如果迭代终止而没有找到这样的条目,则返回false 。 请注意,此实现需要地图大小的线性时间。
Parameters | |
---|---|
value |
Object : value whose presence in this map is to be tested |
Returns | |
---|---|
boolean |
true if this map maps one or more keys to the specified value |
Throws | |
---|---|
ClassCastException |
|
NullPointerException |
Set<Entry<K, V>> entrySet ()
返回此映射中包含的映射的Set
视图。 该集合由地图支持,因此对地图的更改反映在集合中,反之亦然。 如果在对集合进行迭代时修改了映射(除了通过迭代器自己的remove
操作或对迭代器返回的映射条目执行setValue
操作),迭代的结果是未定义的。 该组支持元件移除,即从映射中相应的映射,经由Iterator.remove
, Set.remove
, removeAll
, retainAll
和clear
操作。 它不支持add
或addAll
操作。
Returns | |
---|---|
Set<Entry<K, V>> |
a set view of the mappings contained in this map |
boolean equals (Object o)
将指定的对象与此映射进行比较以获得相等性。 如果给定的对象也是一个映射,并且这两个映射表示相同的映射,则返回true 。 更正式地说,如果是m1.entrySet().equals(m2.entrySet()) ,则两张地图m1和m2表示相同的映射。 这确保equals方法在Map接口的不同实现中正常工作。
这个实现首先检查指定的对象是否是这个映射; 如果是的话,则返回true 。 然后,它检查指定的对象是否是大小与此地图大小相同的地图; 如果不是,则返回false 。 如果是这样,它会迭代该地图的entrySet集合,并检查指定的地图是否包含此地图包含的每个映射。 如果指定的映射未包含此映射,则返回false 。 如果迭代完成,则返回true 。
Parameters | |
---|---|
o |
Object : object to be compared for equality with this map |
Returns | |
---|---|
boolean |
true if the specified object is equal to this map |
V get (Object key)
返回指定键映射到的值,或者如果此映射不包含键映射,则返回 null
。
更正式地说,如果该映射包含从键k
到值v
的映射,例如Objects.equals(key, k)
,则该方法返回v
; 否则返回null
。 (最多可以有一个这样的映射。)
如果此映射允许空值,则返回值null
不一定表示映射不包含该键的映射; 地图也可能明确将密钥映射到null
。 containsKey
操作可用于区分这两种情况。
此实现迭代entrySet()以指定的键搜索条目。 如果找到这样的条目,则返回条目的值。 如果迭代终止而没有找到这样的条目,则返回null 。 请注意,此实现需要地图大小的线性时间; 许多实现将覆盖此方法。
Parameters | |
---|---|
key |
Object : the key whose associated value is to be returned |
Returns | |
---|---|
V |
the value to which the specified key is mapped, or null if this map contains no mapping for the key |
Throws | |
---|---|
ClassCastException |
|
NullPointerException |
int hashCode ()
返回此映射的哈希码值。 地图的哈希码被定义为地图entrySet()视图中每个条目的哈希码的总和。 这确保了m1.equals(m2)意味着m1.hashCode()==m2.hashCode()对于任何两个地图m1和m2,所要求的一般合同hashCode()
。
该实现迭代 entrySet() ,在集合中的每个元素(条目)上调用 hashCode()
,并将结果相加。
Returns | |
---|---|
int |
the hash code value for this map |
boolean isEmpty ()
如果此映射不包含键 - 值映射,则返回 true
。
该实现返回 size() == 0 。
Returns | |
---|---|
boolean |
true if this map contains no key-value mappings |
Set<K> keySet ()
返回包含在此映射中的键的Set
视图。 该集合由地图支持,因此对地图的更改反映在集合中,反之亦然。 如果在对集合进行迭代时修改了映射(除了通过迭代器自己的remove
操作),迭代的结果是未定义的。 该组支持元件移除,即从映射中相应的映射,经由Iterator.remove
, Set.remove
, removeAll
, retainAll
,和clear
操作。 它不支持add
或addAll
操作。
该实现返回一个子类为AbstractSet
。 子类的iterator方法返回一个“包装物”在这个地图的entrySet()迭代器。 size方法委托给此地图的size方法,而contains方法委托给此地图的containsKey方法。
第一次调用此方法时创建该集合,并响应所有后续调用返回该集合。 没有执行同步,因此多次调用此方法的机会不会全部返回相同的集合。
Returns | |
---|---|
Set<K> |
a set view of the keys contained in this map |
V put (K key, V value)
将指定的值与此映射中指定的键关联(可选操作)。 如果映射先前包含该键的映射,则旧值由指定值替换。 (当且仅当m.containsKey(k)
将返回true
地图m
被认为包含密钥k
的映射。)
这个实现总是抛出一个 UnsupportedOperationException 。
Parameters | |
---|---|
key |
K : key with which the specified value is to be associated |
value |
V : value to be associated with the specified key |
Returns | |
---|---|
V |
the previous value associated with key , or null if there was no mapping for key . (A null return can also indicate that the map previously associated null with key , if the implementation supports null values.) |
Throws | |
---|---|
UnsupportedOperationException |
|
ClassCastException |
|
NullPointerException |
|
IllegalArgumentException |
void putAll (Map<? extends K, ? extends V> m)
将指定映射中的所有映射复制到此映射(可选操作)。 此调用的效果等同于在此映射上针对指定映射中的密钥k
到值v
每次映射调用put(k, v)
的效果。 如果在操作过程中修改了指定的映射,则此操作的行为未定义。
该实现迭代指定地图的 entrySet()集合,并为迭代返回的每个条目调用一次该映射的 put操作。
请注意,如果此映射不支持 put操作并且指定的映射非空,则此实现将引发 UnsupportedOperationException 。
Parameters | |
---|---|
m |
Map : mappings to be stored in this map |
Throws | |
---|---|
UnsupportedOperationException |
|
ClassCastException |
|
NullPointerException |
|
IllegalArgumentException |
V remove (Object key)
如果该映射存在,则从该映射中除去该映射(可选操作)。 更正式地说,如果该映射包含从键k
到值v
映射(例如Objects.equals(key, k)
),则映射被移除。 (地图最多可以包含一个这样的映射。)
返回此映射先前与键关联的值,或者如果映射不包含键映射,则返回 null
。
如果此映射允许空值,则返回值null
不一定表示该映射不包含该键的映射; 地图也可能明确将密钥映射到null
。
一旦调用返回,映射将不包含指定键的映射。
此实现迭代entrySet()以指定键搜索条目。 如果找到这样的条目,则通过操作getValue获取其值,使用迭代器的remove操作将该条目从集合(和支持映射)中移除 ,并返回保存的值。 如果迭代终止而没有找到这样的条目,则返回null 。 请注意,此实现需要地图大小的线性时间; 许多实现将覆盖此方法。
请注意,如果 entrySet迭代器不支持 remove方法并且此映射包含指定键的映射,则此实现将引发 UnsupportedOperationException 。
Parameters | |
---|---|
key |
Object : key whose mapping is to be removed from the map |
Returns | |
---|---|
V |
the previous value associated with key , or null if there was no mapping for key . |
Throws | |
---|---|
UnsupportedOperationException |
|
ClassCastException |
|
NullPointerException |
int size ()
返回此映射中键 - 值映射的数量。 如果地图包含超过Integer.MAX_VALUE
元素,则返回Integer.MAX_VALUE
。
该实现返回 entrySet().size() 。
Returns | |
---|---|
int |
the number of key-value mappings in this map |
String toString ()
返回此映射的字符串表示形式。 所述字符串表示包括通过地图的entrySet视图的迭代器返回的顺序键-值映射,括在括号("{}")的列表的。 相邻映射由字符", " (逗号和空格)分隔。 每个键值映射都呈现为键后跟一个等号( "=" ),后跟相关联的值。 键和值被转换为字符串,如valueOf(Object)
。
Returns | |
---|---|
String |
a string representation of this map |
Collection<V> values ()
返回此映射中包含的值的Collection
视图。 该集合由地图支持,因此地图的更改会反映在集合中,反之亦然。 如果在迭代集合的过程中修改了映射(除了通过迭代器自己的remove
操作),迭代的结果是未定义的。 该collection支持元素移除,即从映射中相应的映射,经由Iterator.remove
, Collection.remove
, removeAll
, retainAll
和clear
操作。 它不支持add
或addAll
操作。
该实现返回一个集合,该集合的子类为AbstractCollection
。 子类的iterator方法返回一个“包装物”在这个地图的entrySet()迭代器。 size方法委托给此地图的size方法,而contains方法委托给此地图的containsValue方法。
第一次调用此方法时创建集合,并响应所有后续调用返回。 没有执行同步,因此多次调用此方法的机会不会全部返回相同的集合。
Returns | |
---|---|
Collection<V> |
a collection view of the values contained in this map |
Object clone ()
返回此 AbstractMap实例的浅表副本:键和值本身未被克隆。
Returns | |
---|---|
Object |
a shallow copy of this map |
Throws | |
---|---|
CloneNotSupportedException |