HashTable底层实现原理及和ConcurrentHashMap区别
上一篇 << 下一篇 >>>java集合常见面试题
HashTable底层结构
【HashTable底层实现原理及和ConcurrentHashMap区别】Hashtable 底层使用Entry链表数组存储,Entry自身是单向链表HashTable初始化
属性:
final int hash;
final K key;
V value;
Entrynext;
初始容量:11HashTable数据添加【使用了全局锁synchronized】
负载因子:0.75f
阈值:(int)11*0.75=8
a、如果传入的key为空,则报错HashTable和ConcurrentHashMap区别
b、计算hash,找到下标,如果key存在,则更新返回
c、添加节点信息
c1、如果数量大于阈值,则扩容
c11、扩容
新容量:newCapacity = (oldCapacity << 1) + 1; --老的2倍+1
从尾部往前倒,插入到新的数组中
c12、重新计算当前节点下标
c2、使用头插法插入节点信息
HashTable线程是安全的,底层采用synchronized把整个table锁住解决了线程安全的问题,但这样多线程最终变为单线程在执行;效率非常低;ConcurrentHashMap是HashTable的扩展,解决了线程安全和多线程的效率问题,但是无法扩容。它其实是默认分成16个不同的小的hashTable,然后在通过一些计算方式在多线程的情况下让每个键值对到不同的hashTTable存放,从而能够体现多线程的效率问题,也能够保证线程安全的问题;
![]()
文章图片
也叫分段锁机制。

文章图片
相关文章链接:
<<
<<
<< <<
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Node.js中readline模块实现终端输入
- java中如何实现重建二叉树
- 人脸识别|【人脸识别系列】| 实现自动化妆
- paddle|动手从头实现LSTM
- pytorch|使用pytorch从头实现多层LSTM