`
m635674608
  • 浏览: 5046082 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

ConcurrentSkipListMap/ConcurrentSkipListSet

    博客分类:
  • java
 
阅读更多

转关于ConcurrentSkipListMap 和 ConcurrentSkipListSet 的深度好文, 终于明白了skip List (跳表)的含义

http://www.cnblogs.com/skywang12345/p/3498634.html

http://www.cnblogs.com/skywang12345/p/3498556.html

 =====

ConcurrentSkipListMap介绍

ConcurrentSkipListMap是线程安全的有序的哈希表,适用于高并发的场景。
ConcurrentSkipListMap和TreeMap,它们虽然都是有序的哈希表。但是,第一,它们的线程安全机制不同,TreeMap是非线程安全的,而ConcurrentSkipListMap是线程安全的。第二,ConcurrentSkipListMap是通过跳表实现的,而TreeMap是通过红黑树实现的。
关于跳表(Skip List),它是平衡树的一种替代的数据结构,但是和红黑树不相同的是,跳表对于树的平衡的实现是基于一种随机化的算法的,这样也就是说跳表的插入和删除的工作是比较简单的。

 

ConcurrentSkipListMap原理和数据结构

ConcurrentSkipListMap的数据结构,如下图所示:

说明

先以数据“7,14,21,32,37,71,85”序列为例,来对跳表进行简单说明。

跳表分为许多层(level),每一层都可以看作是数据的索引,这些索引的意义就是加快跳表查找数据速度。每一层的数据都是有序的,上一层数据是下一层数据的子集,并且第一层(level 1)包含了全部的数据;层次越高,跳跃性越大,包含的数据越少。
跳表包含一个表头,它查找数据时,是从上往下,从左往右进行查找。现在“需要找出值为32的节点”为例,来对比说明跳表和普遍的链表。

情况1:链表中查找“32”节点
路径如下图1-02所示:

需要4步(红色部分表示路径)。

 

情况2:跳表中查找“32”节点
路径如下图1-03所示:

忽略索引垂直线路上路径的情况下,只需要2步(红色部分表示路径)。


下面说说Java中ConcurrentSkipListMap的数据结构。
(01) ConcurrentSkipListMap继承于AbstractMap类,也就意味着它是一个哈希表。
(02) Index是ConcurrentSkipListMap的内部类,它与“跳表中的索引相对应”。HeadIndex继承于Index,ConcurrentSkipListMap中含有一个HeadIndex的对象head,head是“跳表的表头”。
(03) Index是跳表中的索引,它包含“右索引的指针(right)”,“下索引的指针(down)”和“哈希表节点node”。node是Node的对象,Node也是ConcurrentSkipListMap中的内部类。

=========

ConcurrentSkipListSet介绍

ConcurrentSkipListSet是线程安全的有序的集合,适用于高并发的场景。
ConcurrentSkipListSet和TreeSet,它们虽然都是有序的集合。但是,第一,它们的线程安全机制不同,TreeSet是非线程安全的,而ConcurrentSkipListSet是线程安全的。第二,ConcurrentSkipListSet是通过ConcurrentSkipListMap实现的,而TreeSet是通过TreeMap实现的。

 

ConcurrentSkipListSet原理和数据结构

ConcurrentSkipListSet的数据结构,如下图所示:

说明
(01) ConcurrentSkipListSet继承于AbstractSet。因此,它本质上是一个集合。
(02) ConcurrentSkipListSet实现了NavigableSet接口。因此,ConcurrentSkipListSet是一个有序的集合。
(03) ConcurrentSkipListSet是通过ConcurrentSkipListMap实现的。它包含一个 ConcurrentNavigableMap对象m,而m对象实际上是ConcurrentNavigableMap的实现类 ConcurrentSkipListMap的实例。ConcurrentSkipListMap中的元素是key-value键值对;而 ConcurrentSkipListSet是集合,它只用到了ConcurrentSkipListMap中的key!

 

分享到:
评论

相关推荐

    并发容器的原理,7大并发容器详解、及使用场景

    3. ConcurrentSkipListMap 和 ConcurrentSkipListSet 基于跳表(Skip List)数据结构,提供了一个可并发访问的有序映射和集合。跳表允许快速查找,同时保持插入和删除操作的高效性。 4. ConcurrentLinkedQueue 是一...

    笔记-5、并发容器1

    总结,ConcurrentHashMap以及其他的并发容器,如ConcurrentSkipListMap和ConcurrentSkipListSet,是Java并发编程中不可或缺的工具,它们通过巧妙的设计和算法实现了高效、安全的数据存储和访问,为多线程环境下的...

    Java concurrency集合之ConcurrentSkipListSet_动力节点Java学院整理

    ConcurrentSkipListSet的数据结构是基于ConcurrentSkipListMap的,它包含一个ConcurrentNavigableMap对象m,而m对象实际上是ConcurrentNavigableMap的实现类ConcurrentSkipListMap的实例。ConcurrentSkipListMap中的...

    java1.6zhongwenban

    3. **并发工具**:加强了java.util.concurrent包,添加了并发集合如ConcurrentSkipListMap和ConcurrentSkipListSet,以及Fork/Join框架,用于高效并行计算。 4. **动态代理**:Java 1.6引入了更强大的动态代理机制...

    jdk1.6(linux和windows).rar

    7. **并发编程工具的增强**:如ConcurrentHashMap的性能提升,以及新的并发容器如ConcurrentSkipListMap和ConcurrentSkipListSet的引入。 8. **JMX(Java Management Extensions)改进**:提供了更好的管理和监控...

    jdk1.7_80版本,1.7最终版

    此外,新的ConcurrentSkipListMap和ConcurrentSkipListSet提供了线程安全的有序集合。 在垃圾收集方面,G1(Garbage-First)垃圾收集器成为了一个可选的垃圾收集策略。G1目标是减少停顿时间,并提供可预测的内存...

    aduna-commons-concurrent-2.5.0.jar.zip

    7. **线程安全的数据结构**:Aduna Commons Concurrent提供了一些线程安全的数据结构,如ConcurrentSkipListMap和ConcurrentSkipListSet,这些数据结构在多线程环境下能保持数据的一致性和完整性。 总之,"aduna-...

    JDK_API_1_6

    - 新增了ConcurrentSkipListMap和ConcurrentSkipListSet,它们是线程安全的有序集合,基于跳跃列表实现,适用于并发环境中。 - 集合框架的迭代器现在支持remove()、add()和set()操作,无需额外的同步。 4. **NIO....

    jdk-7u80-docs-all.zip

    2. 改进的集合框架:包括新的ConcurrentSkipListMap和ConcurrentSkipListSet,以及对HashMap和HashSet的性能优化。 3. SQL API增强:JDBC 4.1引入了新的SQL函数,如CallableStatement的getArray()和getNString()...

    jdk1.6.zip

    7. **增强的并发工具**:添加了新的并发集合类,如ConcurrentSkipListMap和ConcurrentSkipListSet,以及改进的CountDownLatch和CyclicBarrier等同步工具。 8. **JSR 203(Java SE 7的NIO.2预览版)**:虽然JDK 1.6...

    JDK-API 1.7和JDK-API1.6

    2. **改进的集合框架**:引入了泛型,使类型安全得到显著提升,同时增加了新的集合实现,如ConcurrentSkipListMap和ConcurrentSkipListSet。 3. **NIO.2**:新增了非阻塞I/O支持,提供了FileChannel的文件锁定功能,...

    20个最佳的Java集合框架面试题目.zip

    19. **并发容器**:除了ConcurrentHashMap,还有ConcurrentLinkedQueue、ConcurrentSkipListMap和ConcurrentSkipListSet等并发容器,适用于高并发场景。 20. **集合与数组的转换**:toArray()方法可以将集合转换...

    jdk1.8 api 中文文档

    另外,还引入了新的并发集合类,如ConcurrentSkipListMap和ConcurrentSkipListSet。 7. **Method Handles和InvokeDynamic**:这两个特性增强了动态类型的能力,提高了反射和代码生成的效率。 8. **Optional类**:...

    Java并发编程与高并发解决方案之并发容器(J.U.C).docx

    这种实现方式使得`ConcurrentSkipListSet`在进行大量并发操作时仍然能保持较高的性能。 **应用场景:** - 需要排序功能,并且对性能有较高要求的场景。 ##### 4. ConcurrentHashMap `ConcurrentHashMap`是一个...

    jre765.rar

    7. 并发集合改进:`ConcurrentHashMap`的性能提升,以及` ConcurrentSkipListMap`和`ConcurrentSkipListSet`的引入。 安装Java 7 Update 65时,用户需要注意操作系统版本的匹配,以及检查当前系统是否已经安装了...

    jdk1.8安装包.zip

    8. **并发更新集合**:在`java.util.concurrent`包下增加了`ConcurrentHashMap`的更新版本,以及新的`ConcurrentSkipListMap`和`ConcurrentSkipListSet`,它们提供了线程安全的高效集合操作。 9. **新的并发工具类*...

    14个Java并发容器,你用过几个?.docx

    7. **ConcurrentSkipListSet**: 基于ConcurrentSkipListMap的并发Set,同样利用跳表实现快速查找。 8. **ArrayBlockingQueue**: 一个基于固定数组的阻塞队列,当队列满时,生产者会阻塞直到消费者消费;反之,当...

    java se 1.8 中文 api

    8. **并发更新集合类**:如`ConcurrentHashMap`的改进,以及新的`ConcurrentSkipListMap`和`ConcurrentSkipListSet`,提供了高效且线程安全的集合操作。 9. **接口私有方法和静态方法**:Java 8允许接口中定义私有...

    jdk1.8 中文API.7z

    8. **并发更新类**:`java.util.concurrent`包中新增了`ConcurrentHashMap`的几个子类,如`ConcurrentSkipListMap`和`ConcurrentSkipListSet`,以及`Exchanger`和`CompletableFuture`,提供了更高效的并发控制和异步...

    Java——JUC

    - `ConcurrentSkipListMap`和`ConcurrentSkipListSet`:跳表实现的并发集合,支持高效并发的查找、插入和删除操作。 4. **原子类(Atomic Classes)** - `AtomicInteger`、`AtomicLong`等原子类提供了一种在不...

Global site tag (gtag.js) - Google Analytics