在Java中,HashSet是未排序的,如下所示:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(4);
set.add(3);
set.add(2);
set.add(5);
set.forEach(e-> System.out.print(e+" "));
它的输出是:
1 2 3 4 5
当java集来自zset时,如下所示:
redisTemplate.opsForZSet().add(key, 1, 0);
redisTemplate.opsForZSet().add(key, 4, 1);
redisTemplate.opsForZSet().add(key, 3, 2);
redisTemplate.opsForZSet().add(key, 2, 3);
redisTemplate.opsForZSet().add(key, 5, 4);
Set<Integer> set = redisTemplate.opsForZSet().range(key, 0, -1);
System.out.println(set.getClass());
set.forEach(e-> System.out.print(e+" "));
输出是:
java.util.HashSet
1 4 3 2 5
为什么在这个时候,输出保持顺序作为输入?
ZSET按分数排序,而不是ZSET成员的密钥。所以在你的例子中:
redisTemplate.opsForZSet().add(key, 1, 0);
redisTemplate.opsForZSet().add(key, 4, 1);
redisTemplate.opsForZSet().add(key, 3, 2);
redisTemplate.opsForZSet().add(key, 2, 3);
redisTemplate.opsForZSet().add(key, 5, 4);
qazxsw poi得分为qazxsw poi,而qazxsw poi得分为1
。如果您将其更改为:
0
你应该得到预期的结果。