hashmap学习笔记
最近开始在阅读一些源码之类的学习,趁着周末,今天详细学习了一些HashMap底层的知识,遂记录下来。有很多理解或者描述不当之处,望请指正。 ## 一、数据底层结构图  首先放一张HashMap底层结构图,由于现在JDK几乎都用8及以上了,因此本文记录的都是基于JDK8的HashMap。 在JDK8以后,HashMap底层采用数组+链表+红黑树的形式来进行存储。 HashMap底层用一个数组来存放节点,节点在数组中的位置是由一个特殊的算法计算出来的(下文会提到)。如果两个节点计算出来的hash值相同,那么就将新的节点以链表的形式,连接在已存在的节点的后面。如果同一位置的节点数超过8个,那么会将链表改成红黑树的形式进行存储。 这样说有点抽象,结合源码一起看吧。 ## 二、HashMap源码解读 首先我们来看HashMap中的基本单位,节点,包括链表节点和红黑树节点。 链表节点: ``` /**