1、关于list的组织形式

列表数据类型(Lists)可以存储一个有序的字符串列表,常用的操作时向列表两段添加元素,或者获取列表的某一个片段。列表类型的底层实现是一个双向链表(double linked list),所以向列表两端添加元素的时间复杂度为O(1),读取两端元素也非常快。同理,元素越是靠近中间位置,其读取速度越慢。

列表数据类型的组织形式如下:

              图1. list组织结构图

用双向链表(双向箭头)将许多的字符串组织成了一个list(方括号)。

2、list的命令集

LPUSH key value [value ...]
LPUSHX key value
RPUSH key value [value ...]
RPUSHX key value LPOP key
BLPOP key [key ...] timeout
RPOP key
BRPOP key [key ...] timeout RPOPLPUSH source destination
BRPOPLPUSH source destination timeout LINSERT key BEFORE|AFTER pivot value
LREM key count value LINDEX key index
LSET key index value
LLEN key LRANGE key start stop

①、LPUSH key value [value ...] / RPUSH key value [value ...] / LPOP key / RPOP key

功能:类似于压栈和出栈操作,只是可以从两个方法分别进行。注意,空的列表key是不会存在的,即通过POP操作将所有列表中的value全部弹出时,key便会自动删除。

时间复杂度:O(1)

example:

②、LPUSHX key value / RPUSHX key value

功能:在做LPUSH之前或RPUSH之前首先检查key是否存在,如果存在则将value作push操作,否则不执行任何操作。

时间复杂度:O(1)

example:

③、BLPOP key [key ...] timeout / BRPOP key [key ...] timeout

功能:阻塞式弹出命令。如果key不存在,则等待,直到超时为止。

时间复杂度:O(1),不阻塞的情况下与LPOP或RPOP时间一样。

example

在第一个客户端中检测list不存在,使用阻塞的BLPOP list 300,这是阻塞时间为300秒。由于list为空,所有命令行不返回:

在第二个客户端中push一个list,此时list中有值了:

一旦list中有值出现,便返回:

④、RPOPLPUSH source destination / BRPOPLPUSH source destination timeout

功能:source通过RPOP命令弹出一个元素,并且将该元素通过LPUSH压入到destination中。BRPOPLPUSH是阻塞式命令。

时间复杂度:O(1)

example

⑤、LINSERT key BEFORE|AFTER pivot value

功能:向list中插入一个value值,插入的位置参考pivot。如果key不存在,则不作任何操作。如果pivot不存在,则返回-1

时间复杂度:O(N),其中N是找到pivot之前需要查找的value个数

example

⑥、LREM key count value

功能:删除key列表中前count个值等于value的元素。count取值:

    count > 0,则删除从左到右的前count个值等于value的元素

    count < 0,则删除从右到左的前count个值等于value的元素

    count = 0,则删除列表中所有值等于value的元素

时间复杂度:O(N),N表示列表的长度。

example

⑦、LSET key index value

功能:将列表中在index位置的元素值设置为value。

时间复杂度:O(N),N是列表的长度。如果设置第一个元素或最后一个元素,则时间复杂度为O(1)。

example

4、数据类型二:Lists的更多相关文章

  1. MYSQL基础笔记(七)- 数据类型二

    字符串类型 在SQL中,讲字符串类型分成了六类:char,varchar,text,blob,enum,set char,定长字符串 磁盘(二维表)在定义结构的时候,就已经确定了最终数据的存储长度. ...

  2. MySQL学习5 - 数据类型二.md

    一 字符类型 二 枚举类型和集合类型 一 字符类型 #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的 ...

  3. Python学习—基础篇之基本数据类型(二)

    Python中重要的数据结构 1.列表 2.元组 3.字典 4.集合 列表 1.创建列表 # 方式一 name = [] print(type(name)) # 执行结果 >>> & ...

  4. 第二章 C#语法基础(2.1C#语言的数据类型二)

    数据类型案例说明 一.数据类型与变量(计算整数10与20的和) namespace ConsoleApp1 { class Program { static void Main(string[] ar ...

  5. python 数据类型二 (列表和元组)

    一.列表 1.1 列表的介绍 列表是python的基本数据类型之一,其他编程语言也有类似的数据类型,比如JS中的数组,java中的数组等等,它是以[]括起来,每个元素用逗号隔开,而且可以存放各种数据类 ...

  6. python基础----数据类型二

    数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...

  7. python数据类型二

    阅读目录 1.列表的去嵌套 2.元组 3.range 列表的增删改查 一,增: 注意  list和str是不一样的,lst可以发生改变,所以直接就在原来的对象上进行可操作 追加模式 lst = ['麻 ...

  8. python数据类型二(列表和元组)

    一.列表 1.1 列表的介绍 列表是python的基本数据类型之一,其他编程语言也有类似的数据类型,比如JS中的数组,java中的数组等等,它是以[]括起来,每个元素用逗号隔开,而且可以存放各种数据类 ...

  9. python基础3 ---python数据类型二

    ython基础 一.python数据类型     ------列表(list) 1.定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素 特性:可存放多个不同类型的值:可修改指定索 ...

随机推荐

  1. rabbitMQ高可用

    镜像模式 镜像模式和普通模式的区别就是,队列的数据都镜像了一份到所有的节点上.这样任何一个节点失效,不会影响整个集群的使用. 在实现上,mirror queue内部有一套选举算法,会选出一个maste ...

  2. 折腾 Phalcon 的笔记

    不要用 IIS!Apache 万岁! 不要用 Web Platform Installer!自己动手丰衣足食! 注意版本号.TS 与 NonTS.x86 与 x64 的区别! 关于 Apache 的配 ...

  3. Could Not Launch Appium Inspector

    环境: macOS High Sierra 10.13.2 appium GUI 1.5.3 出现如上图报错时,尝试将App Path和Device Name勾选,如下图:

  4. Win32 程序在启动时激活前一个启动程序的窗口

    UWP 程序天生单实例.当然,新 API (10.0.17134)开始也提供了多实例功能.不过,传统 Win32 程序可就要自己来控制单实例了. 本文介绍简单的几个 Win32 方法调用,使 Win3 ...

  5. Paths中的几个重要元素

    Paths中的几个重要元素 Points void CGContextMoveToPoint (    CGContextRef c,    CGFloat x,    CGFloat y ); 指定 ...

  6. 几种设置UITableView的cell动态高度的方法

    1.UITableView加载的顺序是先得到表的行的高度,也就是先调用heightForRowAtIndexPath方法,然后再调用cellForRowAtIndexPath,所以我们有两个办法实现自 ...

  7. 通过Excel生成批量SQL语句,处理大量数据的好办法

    我们经常会遇到这样的要求:用户给发过来一些数据,要我们直接给存放到数据库里面,有的是Insert,有的是Update等等,少量的数据我们可以采取最原始的办法,也就是在SQL里面用Insert into ...

  8. iOS获取图片格式

    我们系统使用的一般文件格式有png.jpg.jpeg.GIF.TIFF 等格式: 图片是我们开发过程中最常见的东西,一般每个公司都会有自己的文件服务器,客户端人员都会从文件服务器中获取相关的图片信息: ...

  9. c++ hook 钩子的使用介绍

    转自:http://www.cnblogs.com/lidabo/archive/2012/11/29/2795269.html 例子:http://www.codeproject.com/Artic ...

  10. 云原生应用基金会CNCF

    2006 年 8 月 9 日,埃里克·施密特(EricSchmidt)在搜索引擎大会上首次提出了“云计算”(Cloud Computing)的概念.一转眼十年过去了,它的发展势如破竹,不断渗透当代的 ...