JDK7-HashMap源码解析
为了方便阅读和写注释,笔者将HashMap源码单独拷出来了,推荐大家也这么做,阅读起来更加轻松,Debug也很方便,更重要的是,你可以修改源码来测试。 继承关系图 阅读源码建议采用自上而下的结构,建议先看Map接口、然后AbstractMap抽象类、最后HashMap。 整体结构分层 Map接口 定义Map具备的功能,使用内部接口Entry来对单个映射关系进行封装,Entry是Map的基本组成单元。 AbstractMap 实现了Map接口的抽象类,实现了绝大多数方法,put和entrySet没有实现,因为这两个方法涉及到底层的实现逻辑和数据结构,必须交给子类去实现。 HashMap 继承自AbstractMap,实现了Map。 实现了自己的Entry,除了保存映射关系外,因为是基于哈希的,所以还记录了哈希值,因为采用的链表结构,所以用next记录了下一个节点的地址。 HashMap解析 笔者几乎给每个属性和方法都写上了注释,想要源码的朋友可以私信我。 各属性的含义 /** * 默认容量:1<<4 = 10000 = 16 * 必须是2的幂次方数 */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4 ; /** * 最大容量:1<<30 = 1000000000000000000000000000000 = 1073741824