跳跃链表 skipList

二分查找的速度已经很快了,在此基础上的跳跃链表是一种以空间换时间的思想。

1.跳跃链表的思想

1.元素有序。

2.有多层,层数越高,元素之间的间隔interval越大。

3.每个元素有一个指向下层该元素的指针,downPointer。

2.查找过程

1.从顶层开始,二分查找待查元素。定位到插入位置而找不到元素,则往下一层从待插入位置开始新的二分查找。

2.不断重复上述过程,直至找到元素或在最底层查找结束。

3.配图

图3-1 大致说明了用法,但少了指向下层元素的指针。

图3-1 跳跃链表示意图

图3-2 跳跃链表示意图

时间: 2024-08-01 00:59:17

跳跃链表 skipList的相关文章

java.util.concurrent.ConcurrentSkipListSet 基于跳跃链表的并发set

1.定义 public class ConcurrentSkipListSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializable {} 明显地,我们的元素需要实现 comparable<E> 接口.

Redis 的几种数据结构&amp;五种数据类型对象

先看几种数据结构 通过分析底层的数据结构,学习如何根据场景选型和设计  1,简单动态字符串     redis使用的字符串SDS有别于C语言中的字符串    a, 结构       free字段为已分配但未使用的空间     len为已使用的空间(不计入'\0')     buf为char数组     b, 与C字符串区别         redis的字符环结构可以理解为将C字符串封装了一层,通过加入的属性字段降低字符串操作的复杂度,提高安全性.         通过len属性可以在常数复杂度获

Redis数据编码方式详解

引言 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove以及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的. 本文将对Redis数据的编码方式和底层数据结构进行分析和介绍,帮助读者更好的了解和使用它们. 数据类型和编码方式 Redis中数据对象的定义如

Redis笔记(三)Redis的数据类型

前面说过,Redis的一大特性是支持丰富的数据类型, 这为更多的应用场景提供了可能. Redis有五种数据类型,包括string,list,set,sorted set和hash,注意,Redis的数据类型不支持嵌套.下面学习一下这五种数据类型的特点和简单应用. >>String 字符串 String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字(当数字类型用 Long 可以表示的时候encoding 就是整型,其他都存储在 sdshdr 当做

15天玩转redis —— 第六篇 有序集合类型

今天我们说一下Redis中最后一个数据类型 "有序集合类型",回首之前学过的几个数据结构,不知道你会不会由衷感叹,开源的世界真好,写这 些代码的好心人真的要一生平安哈,不管我们想没想的到的东西,在这个世界上都已经存在着,曾几何时,我们想把所有数据按照数据结构模式组成 后灌输到内存中,然而为了达到内存共享的方式,不得不将这块内存包装成wcf单独部署,同时还要考虑怎么序列化,何时序列互的问题,烦心事太多 太多...后来才知道有redis这么个吊毛玩意,能把高级的,低级的数据结构单独包装到一

Redis不同数据类型的的数据结构实现

我们知道Redis支持五种数据类型, 分别是字符串.哈希表(map).列表(list).集合(set)和有序集合,和Java的集合框架类似,不同数据类型的数据结构实也是不一样的. >>Redis中的redisObject对象 Redis是使用C编写的,内部实现了一个struct结构体redisObject对象, 通过结构体来模仿面向对象编程的"多态",作为一个底层的数据支持,redisObject代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

详解 Redis 应用场景及应用实例

1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题: 1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间. 2.Memcached与MySQL数据库数据一致性问题. 3.Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL无法

《Redis入门指南》一4.6 节省空间

4.6 节省空间 Redis入门指南Jim Gray1曾经说过:"内存是新的硬盘,硬盘是新的磁带."内存的容量越来越大,价格也越来越便宜.2012年年底,亚马逊宣布即将发布一个拥有240GB内存的EC2实例,如果放到若干年前来看,这个容量就算是对于硬盘来说也是很大的了.即便如此,相比于硬盘而言,内存在今天仍然显得比较昂贵.而 Redis 是一个基于内存的数据库,所有的数据都存储在内存中,所以如何优化存储,减少内存空间占用对成本控制来说是一个非常重要的话题. 4.6.1 精简键名和键值

Redis基础知识之—— 缓存应用场景

转载原文:http://www.cnblogs.com/jinshengzhi/articles/5225718.html 一.MySql+Memcached架构的问题 Memcached采用客户端-服务器的架构,客户端和服务器端的通讯使用自定义的协议标准,只要满足协议格式要求,客户端Library可以用任何语言实现. Memcached服务器使用基于Slab的内存管理方式,有利于减少内存碎片和频繁分配销毁内存所带来的开销.各个Slab按需动态分配一个page的内存(和4Kpage的概念不同,这