承接【数据结构】跳表(SkipList)原理篇,本篇文章我们来分析下如何使用代码实现SkipList。在JDK中并没有SkipList的直接实现,当然我们可以自己写代码实现,但是为了给后面“一致性Hash算法”系列文章做铺垫, 这里我选择 ConcurrentSkipListMap 类来进行分析。 ...
分类:
其他好文 时间:
2020-12-29 11:19:49
阅读次数:
0
简介 跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。 跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。 跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。 存储结构 跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。 源码分析 主要内部类 ...
分类:
其他好文 时间:
2020-05-06 21:47:19
阅读次数:
77
TreeMap 1. TreeMap 实现了 NavigableMap 接口,而 NavigableMap 接口继承自 SortedMap 接口,所以 TreeMap 是有序的。 2. TreeMap 底层是红黑树,所以时间复杂度为 log(n)。 3. TreeMap 并不是线程安全的。 4. T ...
分类:
编程语言 时间:
2020-01-12 21:47:35
阅读次数:
79
1、默认容量? HashTable默认容量为11,计算hash的方式为如下: int hash = key.hashCode();int index = (hash & 0x7FFFFFFF) % tab.length; 根据证明,对素数或奇数直接取模,分布的会更均匀。其它Map的默认容量都为16, ...
分类:
其他好文 时间:
2019-12-25 11:36:09
阅读次数:
122
ConcurrentHashMap 内部结构 在JDK1.8之前的实现结构是:ReentrantLock+Segment+HashEntry+链表 JDK1.8之后的实现结构是:synchronized+CAS+Node+链表或红黑树(与HashMap一致) 而1.8之前锁的是Segment,1.8 ...
分类:
其他好文 时间:
2019-12-20 18:42:46
阅读次数:
74
跳表(SkipList)是一种可用来进行快速查找的数据结构,时间复杂度为O(logn),有点类似于平衡树。之所以这么说,是因为它们都可以对元素进行快速的查找。但二者有一个重要的区别:对平衡树的修改(也就是所谓的插入和删除)往往很可能会导致平衡树进行一次全局的调整(也就是所谓的调平),而对跳表而言,插... ...
分类:
编程语言 时间:
2019-09-28 10:59:20
阅读次数:
111
原文出处http://cmsblogs.com/ 『chenssy』 到目前为止,我们在Java世界里看到了两种实现key-value的数据结构:Hash、TreeMap,这两种数据结构各自都有着优缺点。 然而,这次介绍第三种实现key-value的数据结构:SkipList。SkipList有着不 ...
分类:
编程语言 时间:
2019-08-11 17:45:44
阅读次数:
137
ConcurrentSkipListSet的底层是ConcurrentSkipListMap吗?
ConcurrentSkipListSet是线程安全的吗?
ConcurrentSkipListSet是有序的吗?
ConcurrentSkipListSet和之前讲的Set有何不同?
分类:
编程语言 时间:
2019-04-19 01:06:27
阅读次数:
160
ConcurrentSkipListSet的底层是ConcurrentSkipListMap吗?
ConcurrentSkipListSet是线程安全的吗?
ConcurrentSkipListSet是有序的吗?
ConcurrentSkipListSet和之前讲的Set有何不同?
分类:
编程语言 时间:
2019-04-18 22:12:11
阅读次数:
175
什么是跳表? 跳表有哪些特性? 跳表相比于红黑树如何呢? 为什么Redis选择使用跳表来实现有序集合? ...
分类:
编程语言 时间:
2019-04-14 14:19:00
阅读次数:
145