发现最近面试,面试官容易问的一个问题:HashMap 与 ConcurrentHashMap 的区别?今天就来说说这两者的区别,和应用场景。
HashMap
HashMap 从数据结构上来讲,简单来讲HashMap是哈希表结构,它由【数组+链表+红黑树】组成,哈希表的主干是数组。
数组:采用一段连续的存储单元来存储数据,可通过下标查找元素,时间的复杂度是O(1);在插入删除操作,涉及到数组的元素位移。
线性链表:
1、相邻元素之间通过指针链接,在程序执行过程中,链表的长度可以增加或减少;
2、插入和删除元素时不需要移动其他元素,只需要改变指针,效率高;
3、每个节点中不需要连续
4、由于节点间是无需的,所以查找数据时效率低。
红黑树:是一种自平衡二叉查找树,插入和删除元素操作时通过特定的操作保持二叉查找树的平衡,提高查找效率。
1、每个节点都有红色或黑色
2、树的根节点始终是黑色的
3、没有两个相邻的红色节点
4、节点到其任何一个后代null节点,每条路径的都具有相同数目
结构图
ConcurrentHashMap
// 待更新。。。。。。