ConcurrentSkipListMap
ConcurrentSkipListMap,属于并发集合类,来源于大名鼎鼎的J.U.C,集合并发类的要求是执行速度快,提取数据准,最著名的类便是之前有接触到的ConcurrentHashMap类,通过不断的优化,由刚开始的锁分段到后来的CAS,不断地去提高自身的并发性能,其他便是ConcurrentSkipListMap,CopyOnWriteArrayList,BlockingQueue,虽然使用的频率没有AVL或者红黑树那么高,但是它的实现相对于树来说更加简单。
ConcurrentSkipListMap可以看成是并发版本的TreeMap,和TreeMap不同是,TreeMap不是线程安全的,ConcurrentSkipListMap是线程安全有序的哈希表,且不是基于红黑树实现的,其底层是一种类似跳表(Skip List)的结构
跳表(Skip List)
Skip List(以下简称跳表),是一种类似链表的数据结构,其查询/插入/删除的时间复杂度都是O(logn)
。
我们知道,通常意义上的链表是不能支持随机访问的(通过索引快速定位),其查找的时间复杂度是O(n)
,而数组这一可支持随机访问的数据结构,虽然查找很快,但是插入/删除元素却需要移动插入点后的所有元素,时间复杂度为O(n)
。
首先我们来看下传统链表
如果我想查询15这个元素,那么我需要从头开始遍历,知道遍历到我想要的数据停止,查找的时间复杂度为O(n)
来看下Skip List的数据结构是什么样的: