Redis设计与实现(五)整数列表

整数集合是集合键的底层实现之一,当一个集合只包含整数元素,并且这个集合的元素不多的时候就会选择使用整数集合来存储。

整数数组的结构相对简单一点,只有三个成员变量,encoding编码方式,length表示数组中的元素长度,contents[]用来存放整数数组。要注意的是因为是整数了所以在放入的时候是一个维持有序的过程,并且不会包含任何的重复。

在C里面int是有不同的类型的,所有无论你放入的是什么int类型,最终的实现都是依靠encoding来进行的,如果encoding是一个16位的,你放入8位的,也会天然的变成16位的。

 如果在一个16位的数组中放入一个64位的元素需要进行什么样的前置条件整合呢?首先会根据新64位的元素拓展整个底层数组的空间大小,并给新元素分配空间。将底层数组现有的所有元素都转化为和64位相同的元素,然后再有序的把新的元素放入数组中去,要么要如果进行数组的调整呢?一般的思维可能新一个数组然后进行替换,不过这是C,C的话 如果数组内存不够大再去申请,如果够大的 直接进行扩容就行了。

smartcat.994
原文地址:https://www.cnblogs.com/SmartCat994/p/14144580.html