HashMap 的存储结构
HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的
1 | static class Node<K,V> implements Map.Entry<K,V> { |
TreeNode<K,V> 继承 LinkedHashMap.Entry<K,V>,用来实现红黑树相关的存储结构
1 | static final class TreeNode<K,V> extends LinkedHashMap.Entry<K,V> { |
各常量、成员变量作用
1 | /** |
构造方法
1 | /** |
put方法
put方法主要是调用putVal方法
1 | /** |
putVal方法
1 | /** |
resize 扩容兼初始化
1 | /** |
split 扩容时重新划分树
1 | /** |
putTreeVal 在红黑树中添加节点
1 | /** |
treeifyBin 链表转成红黑树
1 | /** |
untreeify 树变链表
1 | /** |
balanceInsertion 红黑树插入平衡
1 | /** |
get方法
1 | public V get(Object key) { |
getNode
1 | /** |
remove 及其相关方法
1 | public V remove(Object key) { |
removeNode 删除节点
1 | /** |
removeTreeNode 红黑树中删除节点
1 | final void removeTreeNode(HashMap<K,V> map, Node<K,V>[] tab, |
balanceDeletion 红黑树删除平衡
1 | /** |
rotateLeft 红黑树左旋(右旋转同理)
1 | /** |

