Set类型应用:去重与集合运算
引言 前面我们学习了有序的List,今天要学习无序但唯一的Set。 想象一下这些场景: 🏷️ 文章标签:“Java”、“Redis”、“数据库”,每个标签只能添加一次 👥 共同好友:你和张三有哪些共同好友? 🎲 抽奖去重:从1000个用户中随机抽10个中奖者,不能重复 📊 UV统计:今天有多少独立访客? 这些场景的共同特点是:需要去重、需要集合运算。Set正是为此而生。 一、Set的本质 1.1 什么是Set? Set是一个无序的、不重复的字符串集合: Set: {element1, element2, element3, ...} 特点: - 无序:元素没有固定顺序 - 唯一:元素不会重复 - 支持集合运算:交集、并集、差集 示例: # 添加元素 127.0.0.1:6379> SADD myset "apple" "banana" "orange" (integer) 3 # 重复添加无效 127.0.0.1:6379> SADD myset "apple" (integer) 0 # 0表示未添加(已存在) # 查看所有元素(无序) 127.0.0.1:6379> SMEMBERS myset 1) "banana" 2) "orange" 3) "apple" # 顺序可能每次都不同 1.2 Set vs List 特性 Set List 有序性 无序 有序 唯一性 元素唯一 可重复 查询元素是否存在 O(1) O(n) 按索引访问 不支持 支持 集合运算 支持 不支持 适用场景 去重、标签、关系 队列、时间线 1.3 底层实现 Set有两种底层编码: ...