HashMap是最经典的Map实现,下面介绍一下put的过程:
- 在 put 的时候,首先要判断数组是否为空,如果数组为空则会进行第一次的扩容。
- 然后对 key 做 hash 运算,计算出该 key 所在的 index 。
- 如果没有发生碰撞,直接放到数组中,如果发生碰撞,需要判断目前数据结构是链表还是红黑树,根据不同的情况来进行插入。假设key是相同的,则替换到原来的值。
- 最后判断哈希表是否满了(当前哈希表大小*负载因子),如果满了则扩容。
在 get 的时候,还是对 key 做 hash 运算,计算出该 key 所在的 index ,然后判断是否有 hash 冲突。
如果没有冲突则直接返回,如果有冲突则判断当前数据结构是链表还是红黑树,分别从不同的数据结构中取出元素。