1.继承关系
|
|
继承自AbstractMap。AbstractMap实现了Map接口的方法,如增删改查方法。
2.Entry类
|
|
- final int hash;这个变量代表这个Entry的key的hash结果。
- Node
next;这个变量表明这是一个单链表。
3.图像理解数据结构

- 左侧是一个一位数组,Hash表。Entry中的hash指的的就是这个数组的下标,用于快速查找或插入。
- 从数组的每个节点开始延伸一条单链表。Entry中的next构成这条单链表。
4.重要方法
put(key,value)
大致流程是:
1.判断是否要扩容(resize方法);
2.根据key的hash值找到一维数组的下标从而找到链表的头,当然key为null时要特殊处理;
3.遍历单链表,判断是否有Entry的key与参数key一摸一样,如果一样直接更新Entry,返回旧的value值,否则遍历到链尾追加节点;
4.更新成员变量如size,调用resize方法,返回null,说明时增加了新节点,而不是更新节点。
|
|
get(key)
大致流程是:
1.根据key的hash结果查找Hash表;
2.遍历单链表,如果找到,返回Entry的value值,否则返回null。
|
|
5.补充
- Java8之后,HashMap追加了红黑树实现的Entry(代码中的TreeNode类),当链长超过8之后自动转换为红黑树。有兴趣的读者请自行查阅。