ConcurrentSkipListMap - 有序
跳表
假设有一个链表,我们要查找某个节点,则我们需要逐个的查找链表的每个节点
如果链表是有序的,并且每隔一个节点都有一个指向其前面2个位置节点的指针,那我们只需要最多查找⌈N/2⌉个节点(N为链表长度)如果再每隔3个节点就有指向其前面4个位置节点的指针,那么我们就只需要查找不超过⌈N/4⌉+2个节点
也即如果每个(2^i)位置的节点都有指向其前面2^i个位置节点的指针,则查找某个节点的次数可以下降到⌈log2^n⌉次(只是指针数会变为之前的双倍)
这种数据结构可以用于快速的查找,只是插入和删除不太容易实现。
ConcurrentHashMap - 无序
CopyOnWriteArrayList - 写时复制
内部实现是采用写入数据的时候,会copy原数组,复制到一个新数组中,
然后将元素添加到新数组末尾。这个写的过程使用了ReentrantLock可重入锁。
但它读取数据是不加锁的。所以适用场景是读多写少的场景下。