我是靠谱客的博主 虚拟高跟鞋,最近开发中收集的这篇文章主要介绍每天一道面试题一HashMap、HashTable以及ConcurrentHashMap的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
HashMap
1.不是线程安全的。
2.key和value都可以为null,且为null的key只能存在一个,为null的value可以存在多个。
3.初始大小为16,每次扩容都会扩容至原来的2倍。
4.底层是数组+链表+红黑树,在链表个数大于8时会转化为红黑树。
HashTable
1.是线程安全,因为方法加上了synchronize关键字。
2.key和value都不能是null的。
3.初始化大小为11,每次扩容都会扩容至原来的2倍+1.
4.底层是数组加链表,没有红黑树转换。
ConcurrentHashMap
1.是线程安全的,采用分段锁技术保证线程安全,把整个数组分割分段为16段,每一个分段都使用锁进行保护,在1.8后采用的是Node数组+链表+红黑树以及配合使用synchronize+CAS保证线程安全。
2.key和value都不能是null的。
3.初始化大小为16,每次扩容都会扩容至原来的2倍。
4.底层在1.8以前是数组+链表+红黑树,1.8以后是Node数组+链表+红黑树。
最后
以上就是虚拟高跟鞋为你收集整理的每天一道面试题一HashMap、HashTable以及ConcurrentHashMap的区别的全部内容,希望文章能够帮你解决每天一道面试题一HashMap、HashTable以及ConcurrentHashMap的区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复