编程界的小学生
不会说全部api,api这东西想用自己help @list就行了。
一、特点
list类型有序可重复,这里的有序不是指按照数字大小或某规则进行升降序排序,而是指放入元素的顺序。
二、正负索引
比如
lpush lp a b c d e f
# lrange的结果是f e d c b a
lrange lp 0 -1
# 得到b a
lrange lp -2 -1
两个知识点
- 放入的abcdef取出的确是倒序,这是因为采用的lpush,每次都往左边放。
- lrange显示元素居然支持0 -1/ -2 -1这种负数,正是因为负向索引。
类型 | a | b | c | d | e | f |
---|---|---|---|---|---|---|
正向索引 | 5 | 4 | 3 | 2 | 1 | 0 |
负向索引 | -1 | -2 | -3 | -4 | -5 | -6 |
三、api
1、lindex
1.1、概念
语法:lindex key index
找到第n个元素,若不知道列表多长,但是想找到最后一个元素,那么利用负向索引直接lindex key -1
即可,想找倒数第二个元素就是lindex key -1
1.2、演示
对照正负索引表格,完全正确。
2、lset
2.1、概念
设置第index个元素的值为新值。比如想设置key的最后一个元素为xxx,则
lset key -1 xxx
2.2、演示
3、其他api
自己help @list
进行查看。
四、模拟数据结构
1、模拟栈
同向命令可以模拟栈,比如lpush+lpop相当于先进后出,后进先出。
2、模拟队列
反向命令可以模拟队列,比如lpush+rpop相当于先进先出。
3、模拟数组
lindex+lset这种都是基于下标操作的,可以实现数组功能。
4、模拟阻塞单播队列
blpop,很多真实业务场景中也存在利用blpop模拟阻塞队列,类似于实现简单mq功能。
五、总结
- 特点
- 正负索引
- 常见api
- 模拟数据结构
六、个人公众号
微信公众号【Java码农社区】