• 4、数据类型二:Lists


    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

  • 相关阅读:
    关于xml的使用。
    Input标签文件上传,使用详解
    webpack 集成 Typescript && Less
    ionic3 多级联动城市选择插件 ion-multi-picker
    ionic2(3) 密码键盘组件 ionic2-pincode-input 使用
    ionic3 图片(轮播)预览 ionic-gallary-modal组件使用方法
    ios打包,通过Xcode生成ipa文件
    php常见的验证方法
    php 时间转化为刚刚、几秒前、几分前、几天前等等,友好时间提示
    ionic node-sass安装或编译失败:MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”
  • 原文地址:https://www.cnblogs.com/lj95801/p/5636918.html
Copyright © 2020-2023  润新知