注:该系列文章总结自JDK1.9源码的文档注释和源码,我对源码的部分中文注释已经同步到Github:https://github.com/Dodozhou/JDK
Map接口实现概述
Map的实现体系中,常用的类和接口可以大致分为三层。下面一一说明这些类或接口的特点和作用。
第一层
第一层包含一个抽象类AbstractMap和一个接口SortedMap。AbstractMap简单实现了Map接口的大部分操作,降低了实现Map接口的难度,第二层的所有类均继承了该类,它是Map接口的框架性形式。SortedMap接口定义了有序Map需要遵循的规则和实现的方法,有序Map都需要实现该接口。
AbstractMap
该类提供了一个Map接口的框架性实现,降低了实现Map接口的难度。该Map实现允许存入null值。它实现了Map接口的绝大多数方法,如get(Object):
/**
* {
@inheritDoc}
*
* 通过entrySet().iterator()对map进行遍历,如果key等于null,则找出ey为
* null的映射,并返回它的value。如果key不等于null,则找到匹配的映射,并返回value。
* 如果找不到匹配的key,则返回null。
* 该方法花费线性时间,很多实现会重写该方法。
* 由于该实现允许null值的插入,因此不可以仅仅通过返回值来判断key是否存在。这在Map接口中已经说过,
* 可以结合containsKey方法进行判断。
* @implSpec
* This implementation iterates over {
@code entrySet()} searching
* for an entry with the specified key. If such an entry is found,
* the entry's value is returned. If the iteration terminates without
* finding such an entry, {
@code null} is returned. Note that this
* implementation requires linear time in the size of the map; many
* implementations will override this method.
*
* @throws ClassCastException {
@inheritDoc}
* @throws NullPointerException {
@inheritDoc}
*/
public V get(Object key) {
Iterator<En