@x-power
2022-11-29T11:54:34.000000Z
字数 737
阅读 254
面试
歇菜做在一个复制的数组上进行,读操作还是在原始数组上进行,读写分离互不影响。
写操作需要加锁,防止并发写入时导致写入丢失。写操作结束之后需要把原始数组指向新的复制数组。
HashMap:由数组+链表组成的,数组是HashMap的主体,链表是为了解决哈希冲突而存在的。当链表的长度大于8的时候,会将链表转化为红黑树,以减少搜索时间。
LinkedHashMap:继承自HashMap
,所以它的底层仍然基于拉链式散列结构即有数组、链表或红黑树组成。另外,LinkedHashMap
在上面结构的基础上,增加了双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序的相关逻辑。
HashTable:是HashMap的改版,不同之处在于HashMap允许空Key/Value
。
ConcurrentHashMap:线程安全的Map。使用Synchronized
以及CAS
来操作。新增了TreeBin
和ForwardingNode
的概念。
TreeMap:基于红黑树的实现(自平衡的排序二叉树)。键或者键值对的次序是由Comparable或Comparator决定的,TreeMap是唯一带有subMap
方法的map,可以放回一个子树。