程序猿阵线联盟-汇总各类技术干货程序员

高并发集合类之ConcurrentSkipList

2017-08-29  本文已影响0人  激情的狼王

集合排序有两种方式:

  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

2.SkipListMap

Over

上一篇下一篇

猜你喜欢

热点阅读