hashmap简要介绍
jdk版本是1.8,其他版本可能会有不一致。由于是手机端,所以不贴源码,建议参照源码学习。hashmap由数组+链表+红黑树组成。分为put,get,扩容机制三部分大致介绍:
一丶put
1.调用hash(key)计算出hash值,将所有参数传入putVal(参数省略)。
2.初始化判断。第一次table[]数组为空,也对table[]进行初始化。将容量设置为16或自定义长度。
3.根据hash值找到数组下标,
1) 若没有值,直接将Node初始化存入;
2) 若有值,判断该节点是红黑树节点还是链表节点,并将其存入。若是链表节点,是否有一样的key,有则覆盖,没有则插入链表最后,当链表长度等于8时,转为红黑树。
二丶扩容机制
扩容机制和初始化调用的都是resiz()函数,初始为16,每次扩容翻倍,并进行数据迁移。扩容机制有两个:
1.当数组长度大于阀值,即容量*0.75时,扩容;
2.当数组长度小于64,且链表长度大于8;
(判断过程略)
三丶get
1.计算key的hash值,找到对应下标;
2.判断第一个节点是否是我们找的值,若不是,判断是红黑树节点还是链表,调用方法或遍历链表。
以上只是简要介绍,详细的请看源码解析。