高并发集合类之ConcurrentSkipList

作者: 激情的狼王 | 来源:发表于2017-08-29 11:28 被阅读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

    相关文章

      网友评论

        本文标题:高并发集合类之ConcurrentSkipList

        本文链接:https://www.haomeiwen.com/subject/wndedxtx.html