学习
实践
活动
工具
TVP
写文章

有序Map集合_map集合特点

我们通常使用Map集合是HashMap,在大多数情况下HashMap可以满足我们要求,但是HashMap有一个缺点:HashMap是无序,即其迭代顺序与其key或value大小无关。 而在某些情况下,如果我们需要Map集合元素有序,那么HashMap是不能满足我们要求。 那么有没有有序Map集合呢? 有,Java提供了两种有序Map集合:LinkedHashMap和TreeMap; (一)LinkedHashMap LinkedHashMap继承了HashMap,是HashMap子类。 LinkedHashMap不仅维护着一个hash表,而且还维护着一个双向链表,而这个双向链表里元素就是有序。 Map集合,其底层是一颗红黑树,该映射根据其键自然顺序进行排序,或者根据创建映射时提供 Comparator 进行排序,具体取决于使用构造方法。

6210

Redis有序集合

Redis有序集合实现方式是跳表(Skip List),通过在链表建立多级索引,logn时间复杂度定位到区间起点,然后往后遍历,找到对应数据。 作为一种动态数据结构,查找、插入、删除时间复杂度是logn,和红黑数相同,但却比红黑树易于维护。 严格来说,redis对象系统中每种对象都是基于场景选择多种数据结构,比如zset是基于压缩列表 或者 跳跃表+字典,这也体现了Redis对于性能极致追求。

21110
  • 广告
    关闭

    年末·限时回馈

    热卖云产品年终特惠,2核2G轻量应用服务器6.58元/月起,更多上云必备产品助力您轻松上云

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Redis 有序集合

    简介 有序集合是给每个元素设置一个分数(score)作为排序依据这一概念集合,其也是不能有重复元素有序集合提供了获取指定分数和元素范围查询、计算成员排名等功能。 数据结构 是否允许重复元素 是否有序 有序实现方式 应用场景 列表 是 是 索引 时间轴、消息队列等 集合 否 否 无 标签、社交关系等 有序结合 否 是 分数 排行榜等 命令 集合内 添加成员 ZADD CH :返回此次操作后,有序集合元素和分数发生变化个数 INCR :对 score 做增加,相当于后面介绍ZINCRBY。 java 99 python 80 go 120 kotlin (integer) 0 有序集合相比集合提供了排序字段,但是也产生了代价,ZADD 时间复杂度为O(log(n)),SADD 时间复杂度为 (默认64字节)时,Redis会用 ziplist 来作为有序集合内部实现,ziplist 可以有效减少内存使用。

    27520

    Redis有序集合类型

    今天我们继续学习Redis中数据类型,今天我们学习有序集合类型,也是Redis中5大数据类型中最后一个。看名字,我们就知道,有序集合也是一种集合,并且这个集合还是有序。 那有序集合和列表有什么不同呢?因为列表也是有序。它们到底有什么不同呢?有序集合有序和列表有序是不同。列表中有序是插入元素顺序,和查询元素顺序相同。 因为有序集合也是集合类型,所以有序集合中也是不插入重复元素,但在有序集合中分数则是可以重复,那如果在有序集合中有多个元素分数是相同,那么这些重复元素排名是怎么计算呢? 下面我们看一下列表、集合有序集合它们3个数据类型之间区别。 ? 下面我们重点了解一下Redis中有序集合相关命令。 作为有序集合内部实现。

    34740

    Redis Zset有序集合

    Redis Zset是有序集合,和Set集合一样也是不允许存在重复元素,不同是Zset中每个元素都会关联一个double类型分数,Redis正是通过分数为集合成员进行排序. 向有序集合添加一个或多个元素,或者更新已存在元素[分数] zadd key [nx|xx] [ch] [incr] score member [score member ...] nx:只修改已存在元素 获取有序集合元素数量 zcard key 127.0.0.1:6379> zcard key (integer) 3 3. 计算在有序集合中指定分数区间元素数量 zcount key min max 127.0.0.1:6379> zcount key 0 4 (integer) 3 13. 移除有序集合中指定字典区间所有元素,按字典顺序区间 zremrangebylex key min max 127.0.0.1:6379> zrange key 0 3 withscores (empty

    10310

    Map有序性_有序map集合有哪些

    大家好,又见面了,我是你们朋友全栈君。 LinkedHashMap是一个链表数组.基于HashMap链表方式实现机制.具有高效性,同时在内部增加了一个链表,用以存放元素顺序.根据元素增加或者访问先后顺序进行排序. HashMap一个功能缺点是他无序性,被存入到HashMap中元素,在遍历HashMap时,其输出是无序. TreeMap提供了一种完全不同Map实现.TreeMap有着比HashMap更为强大功能,实现了SortedMap接口.TreeMap迭代输出将会以元素顺序进行.TreeMap排序则根据元素 如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    5120

    Redis学习笔记(有序集合

    介绍 在集合类型基础上有序集合类型为集合每个元素都关联了一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在等集合类型支持操作,还能够获得分数最高(或最低)前N个元素、获得指定分数范围内元素等与分数有关操作 计算有序集合交集 •当AGGREGATE是SUM时(也就是默认值),destination键中元素分数是每个参与计算集合中该元素分数和。 •当AGGREGATE是MIN时,destination键中元素分数是每个参与计算集合中该元素分数最小值。 •ZINTERSTORE命令还能够通过WEIGHTS参数设置每个集合权重,每个集合在参与计算时元素分数会被乘上该集合权重。 计算有序集合并集 ZUNIONSTORE destination numkeys key [key ...]

    7020

    Set集合实现有序

    大家好,又见面了,我是你们朋友全栈君。 今天面试问到Set集合实现有序问题,发现集合这部分知识要补一补…. TreeSet提供了一个参数为Colleciton构造方法,利用提供集合所有元素进行自然排序后构造一个新TreeSet集合。 综上,实现Set集合排序,可以通过直接使用TreeSet储存,或者将要实现排序集合作为参数构造新TreeSet集合,得到TreeSet集合就是有序集合了。 那么我在Sort类中实现Comparable接口,然后将该HashSet集合作为参数构造新TreeSet即可得到有序Set集合。 代码: import java.util.HashSet; import java.util.TreeSet; public class Sort implements Comparable<Sort

    8630

    Redis 有序集合(sorted set)

    Redis 有序集合(sorted set) Redis 有序集合集合一样也是string类型元素集合,且不允许重复成员。 不同是每个元素都会关联一个double类型分数。 redis正是通过分数来为集合成员进行从小到大排序。 有序集合成员是唯一,但分数(score)却可以重复。 集合是通过哈希表实现,所以添加,删除,查找复杂度都是O(1)。 Redis 有序集合命令 下表列出了redis有序集合基本命令: 序号 命令及描述 1 ZADD key score1 member1 [score2 member2]向有序集合添加一个或多个成员,或者更新已存在成员分数 2 ZCARD key获取有序集合成员数 3 ZCOUNT key min max计算在有序集合中指定区间分数成员数 4 ZINCRBY key increment member有序集合中对指定成员分数加上增量 min max移除有序集合中给定字典区间所有成员 13 ZREMRANGEBYRANK key start stop移除有序集合中给定排名区间所有成员 14 ZREMRANGEBYSCORE

    27220

    Redis(6)——zset有序集合

    有序集合保留了集合不能有重复成员特性,有序集合元素可以排序,但是它和列表使用索引下标作为排序不同,有序集合给每个元素设置一个分数score 作为排序依据。 ,zrange 是从低到高返回 zrevrange 是从高到低,如果加上withsores 选项,回返回成员分数 127.0.0.1:6379> zrange zsetkey 0 1 withscores 1) "xiaoming" 2) "2" 127.0.0.1:6379> zremrangebyscore zsetkey 2 inf (integer) 1 内部编码 ziplist压缩列表,当有序集合元素个数小于 zset-max-ziplist-entities配置(默认是128个),同时每个元素值都小于zset-max-ziplist-value配置默认64个字节 redis 会用ziplist 来作为有序集合内部实现 skiplist 跳跃表 当ziplist无法满足是 有序集合会使用skiplist

    32530

    redis 学习(7) -- 有序集合

    有序集合添加一个或多个成员,或者更新已存在成员分数 zrem key member1 [member2...] 从有序集合中删除一个或多个成员 zscore key member 获取有序集合中成员分数 zincrby key increment member 对有序集合中指定成员分数加上增量increment zcard key 返回有序集合中元素总个数 zrange key start end [withscores] 通过索引返回有序集合中指定区间成员信息 zrangebyscore key min max [withscores][limit] 通过score返回有序集合中指定分数区间成员信息 zscore key min max 返回有序集合中指定分数范围内元素个数 zremrangebyscore key min max 删除有序集合中指定分数区间所有成员 zremrangebyrank key start end 删除有序集合中给定索引区间所有成员 演示 ?

    27430

    redis命令之操作有序集合

    Redis 有序集合集合一样也是string类型元素集合,且不允许重复成员,不同是每个元素都会关联一个double类型分数。 redis正是通过分数来为集合成员进行从小到大排序 另外有序集合和散列存储着键与值之间映射类似,有序集合也存储着成员与分值之间映射,并且提供了分值处理命令,这些分值在Reids中以IEEE754 如果有序集合 key 不存在,则创建一个空有序集并执行 ZADD 操作。当 key 存在但不是有序集类型时,返回一个错误。 ZCARD key 获取有序集合成员数 ZCOUNT key min max 用于计算有序集合中指定分数区间成员数量 ZINCRBY key increment member 对有序集合中指定成员分数加上增量 ZREMRANGEBYLEX key min max 移除有序集合中给定字典区间所有成员 ZREMRANGEBYRANK key start stop 移除有序集合中给定排名区间所有成员 ZREVRANGE

    27310

    【Redis】有序集合交集与并集

    Redis支持多种类型数据结构,最简单字符串(strings),适合存储对象哈希(hash),简单字符串列表(list),无序集合(set),有序集合(sorted set),以及用于做基数统计 HyperLogLog,其中使用频率相对较高便是集合。 无论是无序集合set,还是有序集合zset,集合元素都具有唯一性,如果插入相同元素,都将被忽略。有时候通过业务逻辑直接存储集合,并不能满足所有的业务需求。 article:type:typeid articleid sadd article:type:1 "2" sadd article:type:1 "3" sadd article:type:1 "4" 按文章点赞与踩计算出文章分数有序集合 zinterstore 可以计算多个有序集合交集(无序集合score为0),并生成新有序集合。 ZINTERSTORE destination numkeys key [key ...]

    16320

    Redis 5 有序集合新增命令

    Redis 5 已经发布了,对有序集合新增了4个命令: ZPOPMAX ZPOPMIN BZPOPMAX BZPOPMIN 下面看一下这几个命令作用和用法。 ZPOPMAX 命令: ZPOPMAX key [count] 作用: 从指定集合中删除并返回 count 个 score 值最高元素。如果没有指定 count,默认值为 1。 如果 count 大于 1,返回值按 score 排序,score 最大第一个返回。 " ZPOPMIN 命令: ZPOPMIN key [count] 作用: 与 ZPOPMAX 一样,只是返回 score 最小。 BZPOPMAX 命令: BZPOPMAX key [key ...] timeout 作用: BZPOPMAX 是 ZPOPMAX 阻塞版本,作用与 ZPOPMAX 相同,只是在目标集合中没有元素时会阻塞

    86820

    Redis散列与有序集合

    前面文章我们介绍了列表与集合基本命令,本文我们来看看Redis中散列与有序集合。 散列 很多时候,散列就像一个微缩版redis,在本文中,小伙伴们对看到许多散列命令都会有似曾相识感觉。 字符串长度,如果hash或者field不存在,返回0,如下: 127.0.0.1:6379> HSTRLEN k2 h2 (integer) 2 有序集合 有序集合类似Sets,但是每个字符串元素都关联到一个叫 里面的元素总是通过score进行着排序,因此它是可以检索一系列元素。 ZADD ZADD命令可以将所有指定成员添加到键为key有序集合里面。 如果指定添加成员已经是有序集合里面的成员,则会更新该成员分数(scrore)并更新到正确排序位置。 withscores 1) "v1" 2) "63" ZINTERSTORE ZINTERSTORE命令可以计算给定numkeys个有序集合交集,并且把结果放到destination中。

    28300

    Redis | Redis 有序集合相关命令

    Redis 支持多种数据结构,比如 字符串、列表、集合有序集合 和 哈希 等数据结构。 本次我整理了关于 有序集合 相关命令,也就是关于 Sorted Sets 相关命令,如下图。 ? 上图中用红色圈中部分,就是关于 有序集合 相关命令。 在 Sorted Sets 中 Value 是一个有序集合集合有序(上篇文章 Sets 是无序),且是不可以重复有序集合包含两部分,分别是成员(member)和分数(score)两部分。 java 和 c++ 分数都没有改变,php 加入了 zset。 总结 Redis 有序集合类型提供命令还是比较多,它不但可以当作一个集合来用,它还具备 排名、排序、分页、求交集 和 求并集 功能,当然, 还可以在一些特定应用场景中轻松完成功能开发

    35140

    Redis sorted set 有序集合类型

    集合插入,按照分数范围超找 zadd zset1 10.1 val1 zadd zset1 11.2 val2 zadd zset1 10.3 val3 zcard zset1 zrange zset1

    41240

    Redis:12---有序集合对象

    一、有序集合对象概述 它保留了集合不能有重复成员特性, 但不同是,有序集合元素可以排序。 1、91、200、220、250、251,有序集合提供了获取指定 分数和元素范围查询、计算成员排名等功能,合理利用有序集合,能帮助我们在实际开发中解决很多问题 ? 特点: 有序集合键被称为“成员”,成员值成为“分值”,分值必须为浮点数 散列只能通过键访问元素。 但是有序集合既可以通过键访问元素,也可以根据分值以及分值排列顺序来访问元素结构 和散列一样,都是用于存储键值对,键值不允许重复 与散列不同: 下图列出了列表、集合有序集合三者异同点: ? zinterstore destinationnum keys key[key...1 (n*k)+0O(m*log(m)),”是成员数最小有序集合成员个数,k是有序集合个数,m是结果集中成员个数

    30420

    Python 操作redis有序集合(sorted set)

    如果有序集合 key 不存在,则创建一个空有序集并执行 ZADD 操作。 当 key 存在但不是有序集类型时,返回一个错误。 #输出结果是3 # 获取两个有序集合交集并放入dest集合,如果遇到相同值不同分数,则按照aggregate进行操作 # aggregate值为: SUM MIN MAX print r.zinterstore Zrangebylex Zrangebylex 通过字典区间返回有序集合成员。 当有序集合所有成员都具有相同分值时,有序集合元素会根据成员 值 (lexicographical ordering)来进行排序,而这个命令则可以返回给定有序集合键 key 中, 元素值介于 20.Zscan Zscan 命令用于迭代有序集合元素(包括元素成员和元素分值)返回每个元素都是一个有序集合元素,一个有序集合元素由一个成员(member)和一个分值(score)组成。

    3.1K10

    【Redis实战】有序集合类型(Sorted Set)

    (ZINCRBY) 6、获得集合中元素数量(ZCARD) 7、获得指定分数范围内元素个数(ZCOUNT) 8、删除一个或多个元素(ZREM) 9、按照排名范围删除元素(ZREMRANGEBYRANK ) 10、按照分数范围删除元素(ZREMRANGEBYSCORE) 11、获得元素排名(ZRANK) 1、增加元素(ZADD)   ZADD命令用来向有序集合中加入一个元素和该元素分数,如果该元素已经存在则会用新分数替换原有的分数 ZADD命令返回值是新加入到集合元素个数(不包含之前已经存在元素)。    假设我们用有序集合模拟计分板,现在要记录Tom、Peter和David三名运动员分数(分别是89分、67分和100分): 127.0.0.1:6379> ZADD scoreboard 89 Tom 127.0.0.1:6379> ZINCRBY scoreboard 4 Jerry "60" 127.0.0.1:6379> ZINCRBY scoreboard -4 Jerry "56" 6、获得集合中元素数量

    8920

    扫码关注腾讯云开发者

    领取腾讯云代金券