redis set类型和zset类型

本文详细介绍了Redis中Set和Zset两种数据结构的特点及应用场景。Set作为一种无序不重复的字符串集合,提供了丰富的操作如并集、交集等;而Zset则在此基础上增加了成员的权重概念,支持按权重排序等功能。两者都是构建复杂应用的强大工具。

一.set类型

set是一个集合,它是string类型的无序集合,set是通过hash table实现的,添加,删除,查找的时间复杂度都是O(1),对于集合我们可以取并集,交集,差集。通过这些操作我们可以实现SNS中好友推荐和Blog的tag

set常用命令:
(1)sadd:
向一个集合中添加一个元素。例如:sadd set1 Hello

(2)smembers

  查看集合中的所有元素。例如:smembers set1

(3)srem

  删除集合中一个指定的元素。例如:srem set1 Hello

(4)spop

  随机弹出set集合中德一个元素。例如:spop set1

(5)sdiff

  求两个集合的差集,比如sdiff set1 set2,表示保留set1中与set2不同的所有元素。

(6)sdiffstore

  将返回的差集存进一个集合。例如:sdiffstore set3 set1 set2,表示把set1与set2的差集存进

  集合set3。

(7)sinter

  返回给定两个集合的交集。例如:sinter set1 set2,表示返回set1和set2的交集。

(8)sinterstore

  将两个集合的交集存进一个集合。例如:sinterstore set3 set1 set2,表示把set1和set2的交集

  存进集合set3。

(9)sunion

  返回给定两个集合的并集。例如:sunion set1 set2,表示返回set1和set2的并集。

(10)sunionstore

  将两个集合的并集存进一个集合。例如:sunionstore set3 set1 set2,表示把set1和set2的并集

  存进集合set3

(11)smove

  从第一个key对应的set中移除member并添加到第二个对应的集合中。

  例如:smove set1 set2 Hello,表示把set1中的Hello元素移动到set2中。

(12)scard

  返回key对应集合的元素的个数。例如:scard set1。

(13)sismember

  判断某一个元素是否为集合的元素。比如:sismember set1 Hello,表示判断Hello是否为set1的中

  的元素。

(14)srandmember

  随机返回名称为key的set的一个元素。例如:srandmember set1。

二.zset类型

zset是在set的基础上增加了顺序,形成一个有序的集合。

zset的常见操作:

(1)zadd

   向有序集合zset中增加一个元素。例如:zadd zset 1 Hello

(2)zrange

   输出zset中指定范围内的的所有元素,按照score从小到大的顺序。

   例如:zrange zset 0 -1 withscores,表示输出有序集 合zset中所有的元素,并且输出顺序号。

(3)zrem

   删除名称为key的zset集合中的元素member。例如:zrem set1 Hello。

(4)zincrby

   把有序集合zset中的指定元素的序列号加上指定的值。例如:zincrby zset 4 Hello

(5)zrank

   返回名称为key的zset集合中元素的排名,按照下标从小到大的排名。例如:zrank zset Hello。

(6)zrevrank

   返回名称为key的zset集合中元素的排名,按照下表从大到小的排名。例如:zrevrank zset Hello。

(7)zrevrange

   按照score从大到小的顺序输出集合中所有元素。例如:zrevrange zset 0 -1 withscores。

(8)zrangebyscore

   返回集合中给定区间的元素。例如:zrangebyscore zset 2 3 withscores

(9)zcount

   返回集合中score在给定区间的数量。zcount zset 2 3

(10)zcard

   返回集合中元素的个数。

(11)zremrangebyrank

   按照索引来删除给定区间的元素。例如:zremrangebyrank zset 1 2

(12)zremrangebyscore

   删除score在指定范围内的元素。例如:zremrangebyscore zset 1 2
在 Java 中,`Hashtable` 是一个线程安全的哈希表实现,它存储键值对(Key-Value Pair),不允许使用 `null` 作为键或值。它是 Java 集合框架中的一部分,位于 `java.util` 包中。与 `HashMap` 不同,`Hashtable` 是线程安全的,适用于多线程环境。 ### 示例代码:使用 Java Hashtable 以下是一个使用 `Hashtable` 的完整示例: ```java import java.util.Hashtable; import java.util.Enumeration; import java.util.Set; import java.util.Iterator; public class HashtableExample { public static void main(String[] args) { // 创建一个 Hashtable 实例 Hashtable<String, Integer> table = new Hashtable<>(); // 添加键值对 table.put("Apple", 10); table.put("Banana", 20); table.put("Orange", 30); table.put("Grapes", 40); // 获取值 System.out.println("Value for key 'Apple': " + table.get("Apple")); // 遍历 Hashtable 使用 Enumeration(旧版方式) System.out.println("\nUsing Enumeration:"); Enumeration<String> keys = table.keys(); while (keys.hasMoreElements()) { String key = keys.nextElement(); System.out.println("Key: " + key + ", Value: " + table.get(key)); } // 遍历 Hashtable 使用 Iterator(推荐方式) System.out.println("\nUsing Iterator:"); Set<String> keySet = table.keySet(); Iterator<String> iterator = keySet.iterator(); while (iterator.hasNext()) { String key = iterator.next(); System.out.println("Key: " + key + ", Value: " + table.get(key)); } // 检查是否包含某个键或值 System.out.println("\nContains Key 'Banana': " + table.containsKey("Banana")); System.out.println("Contains Value 30: " + table.containsValue(30)); // 删除某个键值对 table.remove("Orange"); System.out.println("\nAfter removing 'Orange': " + table); // 获取 Hashtable 大小 System.out.println("Size of Hashtable: " + table.size()); // 清空 Hashtable table.clear(); System.out.println("After clearing: " + table); } } ``` ### 解释 1. **创建 `Hashtable` 实例:** ```java Hashtable<String, Integer> table = new Hashtable<>(); ``` 这行代码创建了一个键为 `String` 类型、值为 `Integer` 类型的哈希表。 2. **添加键值对:** ```java table.put("Apple", 10); ``` 使用 `put(K key, V value)` 方法将键值对插入到 `Hashtable` 中。 3. **获取值:** ```java table.get("Apple"); ``` 使用 `get(Object key)` 方法获取指定键对应的值。 4. **遍历 `Hashtable`:** - 使用 `Enumeration`: ```java Enumeration<String> keys = table.keys(); ``` 通过 `keys()` 方法获得键的枚举,然后遍历。 - 使用 `Iterator`: ```java Set<String> keySet = table.keySet(); Iterator<String> iterator = keySet.iterator(); ``` 通过 `keySet()` 方法获取键的集合,然后使用 `Iterator` 遍历。 5. **检查键或值是否存在:** ```java table.containsKey("Banana"); table.containsValue(30); ``` 6. **删除键值对:** ```java table.remove("Orange"); ``` 7. **清空获取大小:** ```java table.clear(); table.size(); ``` --- ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值