为什么从redis zset构造的HashSet保持排序?

问题描述 投票:0回答:1

在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

为什么在这个时候,输出保持顺序作为输入?

redis jedis spring-cache
1个回答
0
投票

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

你应该得到预期的结果。

© www.soinside.com 2019 - 2024. All rights reserved.