首页 存档 技术 查看内容

JDK 1.8 的 ConcurrentHashMap 设计详解

2018-3-30 13:00 |来自: 互联网 315 0

摘要: 本文针对jdk1.8的ConcurrentHashMap 一、1.8的HashMap设计 1.1 整体概览 HashMap采用的是数组 链表 红黑树的形式。 数组是可以扩容的,链表也是转化为红黑树的,这2种方式都可以承载更多的数据。 用户可以设置的参 ...


本文针对jdk1.8的ConcurrentHashMap


一、1.8的HashMap设计

1.1 整体概览


HashMap采用的是数组 链表 红黑树的形式。

数组是可以扩容的,链表也是转化为红黑树的,这2种方式都可以承载更多的数据。

用户可以设置的参数:初始总容量默认16,默认的加载因子0.75

初始的数组个数默认是16(用户不能设置的)

容量X加载因子=阈值

一旦目前容量超过该阈值,则执行扩容操作。

什么时候扩容?

  • 1 当前容量超过阈值

  • 2 当链表中元素个数超过默认设定(8个),当数组的大小还未超过64的时候,此时进行数组的扩容,如果超过则将链表转化成红黑树

什么时候链表转化为红黑树?(上面已经提到了)

  • 当数组大小已经超过64并且链表中的元素个数超过默认设定(8个)时,将链表转化为红黑树

目前形象的表示数组中的一个元素称为一个桶


1.2 put过程


根据key计算出hash值

hash值

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部