HashTable源码分析
HashTable是一个线程安全的HashMap,是jdk早期版本的产物,但其效率较低
1.初始化
可以看到,与HashMap不同,HashTable无参构造是默认会构造一个容量为11的数组,而HashMap在无参构造初始化时不会构造数组,只有在第一个put后才会构造容量为16的数组
2.put方法
与CurrentHashMap不同,HashTable的处理方法比较粗暴,直接在put方法上加锁,而CurrentHashMap是采用CAS或者对操作的节点对象加锁
HashTable不允许key或value为空,而HashMap可以,下面是HashMap的代码
static final int hash(Object key) {
int h;
//如果key为NULL那么哈希值为0
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
此外,HashTable的底层是数组+链表,当哈希冲突时,只采用链表的方式,而HashMap是树组+链表+红黑树
其他方法大致相同,就不分析了
总结
1.HashTable无参构造在初始化时就创建一个长度11的数组,而HashMap无参构造在第一次put后创建长度为16的数组
2.HashTable不允许key和value为空,而HashMap可以
3.HashTable底层为数组+链表,而HashMap底层为数组+链表+红黑树
4.HashTable解决线程安全的方法是在put等方法上添加synchronized,锁住的是整个HashTable,而CurrentHashMap则是对操作的节点采用CAS或synchronized
我有一壶酒
足以慰风尘
尽倾江海里
赠饮天下人
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话