K
- 由该地图维护的键的类型
V
- 映射值的类型
public abstract class AbstractMap<K,V> extends Object implements Map<K,V>
为了实现一个不可修改的地图,程序员只需要扩展这个类并为entrySet方法提供一个实现,该方法返回地图映射的设置视图。 通常,返回的集合又将在AbstractSet顶部实现 。 这个集合不应该支持add或remove方法,而且它的迭代器不应该支持remove方法。
要实现可修改的映射,程序员必须另外覆盖此类的put方法(否则将抛出UnsupportedOperationException ),由entrySet().iterator()返回的迭代器必须另外实现其remove方法。
程序员通常应该提供一个空隙(无参数)和图构造器,按照在Map接口规范的建议。
该类中每个非抽象方法的文档详细描述了其实现。 如果实施的地图承认更有效的实施,则可以覆盖这些方法中的每一个。
这个班是Java Collections Framework的成员。
Map
, Collection
Modifier and Type | Class and Description |
---|---|
static class |
AbstractMap.SimpleEntry<K,V>
保存密钥和值的条目。
|
static class |
AbstractMap.SimpleImmutableEntry<K,V>
保持一个不变的钥匙和价值的条目。
|
Modifier | Constructor and Description |
---|---|
protected |
AbstractMap()
唯一的构造函数。
|
Modifier and Type | Method and Description |
---|---|
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)
返回到指定键所映射的值,或
null 如果此映射包含该键的映射。
|
int |
hashCode()
返回此地图的哈希码值。
|
boolean |
isEmpty()
如果此地图不包含键值映射,则返回
true 。
|
Set<K> |
keySet()
返回此地图中包含的键的 Set 视图。
|
V |
put(K key, V value)
将指定的值与该映射中的指定键相关联(可选操作)。
|
void |
putAll(Map<? extends K,? extends V> m)
将指定地图的所有映射复制到此映射(可选操作)。
|
V |
remove(Object key)
如果存在(从可选的操作),从该地图中删除一个键的映射。
|
int |
size()
返回此地图中键值映射的数量。
|
String |
toString()
返回此地图的字符串表示形式。
|
Collection<V> |
values()
返回此地图中包含的值的 Collection 视图。
|
finalize, getClass, notify, notifyAll, wait, wait, wait
compute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, putIfAbsent, remove, replace, replace, replaceAll
public int size()
public boolean isEmpty()
public boolean containsValue(Object value)
containsValue
在界面
Map<K,V>
value
- 要在该地图中存在的值要进行测试
ClassCastException
- 如果该值对于该地图是不合适的类型(
optional )
NullPointerException
- 如果指定的值为空,并且该映射不允许空值(
optional )
public boolean containsKey(Object key)
containsKey
在界面
Map<K,V>
key
- 要在这个地图上存在的密钥要被测试
ClassCastException
- 如果密钥对于此地图是不合适的类型(
optional )
NullPointerException
- 如果指定的键为空,并且此映射不允许空键(
optional )
public V get(Object key)
null
如果此映射包含该键的映射。
更正式地,如果这张地图包含一个从键k
到值v
,使得(key==null ? k==null : key.equals(k))
,那么这个方法返回v
; 否则返回null
。 (最多可以有一个这样的映射。)
如果此映射允许空值,则返回值null
并不一定表明该映射不包含该键的映射关系; 地图也可能明确地将密钥映射到null
。 可以使用containsKey
操作来区分这两种情况。
get
在接口
Map<K,V>
key
- 要返回其关联值的键
null
ClassCastException
- 如果密钥是该地图不合适的类型(
optional )
NullPointerException
- 如果指定的键为空,并且此映射不允许空键(
optional )
public V put(K key, V value)
put
在接口
Map<K,V>
key
- 指定值与之关联的键
value
- 与指定键相关联的值
UnsupportedOperationException
-如果
put操作不受此地图支持
ClassCastException
- 如果指定的键或值的类阻止它存储在此映射中
NullPointerException
- 如果指定的键或值为空,并且此映射不允许空值或值
IllegalArgumentException
- 如果指定键或值的某些属性阻止其存储在此映射中
public V remove(Object key)
(key==null ? k==null : key.equals(k))
,该映射被去除。
(地图最多可以包含一个这样的映射。)
返回此地图先前相关联的密钥,或null如果映射包含该键的映射值。
如果此映射允许空值,那么null返回值并不一定表明此映射不包含该键的映射关系; 地图也可能显式地将密钥映射到null 。
一旦呼叫返回,该映射将不包含指定键的映射。
remove
在接口
Map<K,V>
注意,此实现抛出UnsupportedOperationException如果entrySet迭代器不支持remove方法,并且此映射包含指定键的映射关系。
key
- 要从地图中删除其映射的密钥
UnsupportedOperationException
-如果
remove操作不受此地图支持
ClassCastException
- 如果密钥是该地图不合适的类型(
optional )
NullPointerException
- 如果指定的键为空,并且此映射不允许空键(
optional )
public void putAll(Map<? extends K,? extends V> m)
put(k, v)
的效果相当。
如果在操作进行中修改了指定的地图,则此操作的行为是未定义的。
putAll
在界面
Map<K,V>
请注意,如果此映射不支持put操作,并且指定的映射是非空的,则此实现将抛出UnsupportedOperationException 。
m
- 要存储在此地图中的映射
UnsupportedOperationException
-如果
putAll操作不受此地图支持
ClassCastException
- 如果指定地图中的键或值的类阻止它存储在此映射中
NullPointerException
- 如果指定的映射为空,或者该映射不允许空值或值,并且指定的映射包含空值或值
IllegalArgumentException
- 如果指定地图中的键或值的某些属性阻止其存储在此映射中
public void clear()
clear
在接口
Map<K,V>
注意,此实现抛出UnsupportedOperationException如果entrySet不支持clear操作。
UnsupportedOperationException
-如果
clear操作不受此地图支持
public Set<K> keySet()
Set
视图。
该集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。
如果在集合中的迭代过程中修改了映射(除了通过迭代器自己的remove操作),迭代的结果是未定义的。
该组支持元件移除,即从映射中相应的映射,经由Iterator.remove,Set.remove,removeAll,retainAll和clear操作。
它不支持add或addAll操作。
keySet
在接口
Map<K,V>
AbstractSet
的集合 。
子类的iterator方法在该地图的entrySet()迭代器上返回“包装对象”。
size方法将该地图的size方法和contains方法委托给本地图的containsKey方法。
该集合是在第一次调用此方法时创建的,并响应所有后续调用而返回。 不执行同步,因此对该方法的多次调用将不会全部返回相同的集合。
public Collection<V> values()
Collection
视图。
集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。
如果在集合中的迭代正在进行中修改映射(除了通过迭代器自己的remove操作),迭代的结果是未定义的。
该collection支持元素移除,即从映射中相应的映射,经由Iterator.remove,Collection.remove,removeAll,retainAll和clear操作。
它不支持add或addAll操作。
values
在接口
Map<K,V>
AbstractCollection
的集合 。
子类的iterator方法通过该映射的entrySet()迭代器返回“包装对象”。
size方法将该地图的size方法和contains方法委托给本地图的containsValue方法。
该集合是在第一次调用此方法时创建的,并响应所有后续调用而返回。 不执行同步,因此对该方法的多次调用将不会全部返回相同的集合。
public abstract Set<Map.Entry<K,V>> entrySet()
Map
Set
视图。
该集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。
如果在集合中的迭代(除了通过迭代器自己的remove操作,或通过迭代器返回的映射条目上的setValue操作之外)修改映射,则迭代的结果是未定义的。
该组支持元件移除,即从映射中相应的映射,经由Iterator.remove,Set.remove,removeAll,retainAll和clear操作。
它不支持add或addAll操作。
public boolean equals(Object o)
equals
在接口
Map<K,V>
equals
在
Object
o
- 要与此映射相等的对象进行比较
Object.hashCode()
, HashMap
public int hashCode()
Object.hashCode()
的一般合同的要求 。
hashCode
在接口
Map<K,V>
hashCode
在
Object
hashCode()
,并将结果相加。
Map.Entry.hashCode()
,
Object.equals(Object)
,
Set.equals(Object)
public String toString()
String.valueOf(Object)
。
protected Object clone() throws CloneNotSupportedException
clone
在
Object
CloneNotSupportedException
- 如果对象的类不支持Cloneable
接口。
覆盖clone
方法的子类也可以抛出此异常以指示实例无法克隆。
Cloneable