1、整数集合(intset)当一个集合键只包含整数值元素,且数量不多时,底层是整数集合,可以保存int16 int32 int64

contents数组是整数集合的底层实现,整数集合每个元素都是contents数组的一个项,从小到大排序,无重复项 length:元素数量 encoding:intset_enc_16 intset_enc_32 intset_enc_64
2、升级
2.1、集合添加新元素,新元素的类型比集合所有元素类型都要长时,需要进行升级(upgrade),升级分为三步
2.2、第一步,根据新元素类型,扩展集合底层数组空间大小,并且为新元素分配空间
第二步、将底层数组现有的所有元素转换成与新元素相同的类型,并将类型转换后的元素放置到正确的位置上,放置过程,继续维持底层数组有序性不变
第三步、将新元素添加到底层数组里面
2.3、因为每次向整数集合添加新元素都可能会引起升级,每次升级都要对所有已有元素进行类型转换,所以添加新元素时间复杂度是o(N)
3、升级的好处
3.1、一提升整数集合的灵活性
因为c语言是静态类型语言,为了避免类型错误,通常不会将两种不同类型的值放在同一个数据结构里面
3.2、尽可能地节省内存
int_16 会判断升级为int_32,或者int_64,而不是直接使用int_64
4.整数集合不支持降级操作
网友评论