高并发集合类之ConcurrentSkipList

集合排序有两种方式:

  1.Collections.sort(List list)

  2.Collections.sort(List list,Comparator c)

两种排序方式都是一个德行,只是灵活程度不同而已。

在高并发的情况下如果要进行排序的话,怎么办呢?难道要等所有线程执行完然后排序吗?显然不太完美。

ConcurrentSkipList是底层是通过跳表来实现的,支持排序。

跳表(SkipList):使用“空间换时间”的算法,令链表的每个结点不仅记录next结点位置,还可以按照level层级分别记录后继第level个结点。在查找时,首先按照层级查找,比如:当前跳表最高层级为3,即每个结点中不仅记录了next结点(层级1),还记录了next的next(层级2)、next的next的next(层级3)结点。现在查找一个结点,则从头结点开始先按高层级开始查:head->head的next的next的next->。。。直到找到结点或者当前结点q的值大于所查结点,则此时当前查找层级的q的前一节点p开始,在p~q之间进行下一层级(隔1个结点)的查找......直到最终迫近、找到结点。此法使用的就是“先大步查找确定范围,再逐渐缩小迫近”的思想进行的查找。

下面直接看例子:

1.普通map


高并发集合类之ConcurrentSkipList_第1张图片

2.SkipListMap


高并发集合类之ConcurrentSkipList_第2张图片

Over

你可能感兴趣的:(高并发集合类之ConcurrentSkipList)