关于set的实现原理问题
来源:4-1 set的使用 Intersection of Two Arrays
烈焰卡卡
2020-06-05
老师您好,我想问一个非常基础的问题,关于set集合这种数据类型,底层的实现问题。
通过以往的学习和了解,集合的底层都是通过哈希表来实现的,当我们存或者取的时候,根据key计算出其对应数组的位置,该位置上可能是一个链表,然后再寻找链表中对应该key的value。
但是无论是哪种语言,或者是redis中,set都实现了一个方法叫pop,也就是随机取出一个值,这种对于set结构,他随机取出其中一个值是如何来实现的呢?还是说,每个set都维护了一个值,来表示这个set内部数组第一个有数值位置的索引,所谓随机取出只是取出了该第一个索引位置的第一个key
写回答
1回答
-
标准的 set 是没有“随机取一个值”这个方法的。可以参考 C++ 或者 Java 的 set 文档(无论有序无序)。
我不确定 redis,但因为 redis 内部使用的是跳表(而不是哈希表),所以可以随机取一个数。
继续加油!:)
032020-06-05
相似问题