inset是在C语言本身数组的基础上做了进一步的封装
这里每个元素的都占用了两个字节(及时数据本身不需要两个字节,比如5),数组内存是连续的且元素的字节数也是固定的,所以就可以根据起始内存地址推算出其他元素的内存地址,在这里声明位数是为了基于数组角标(下标)去快速定位对应的元素。
在遇到超过容量范围(超过了当前intset的编码)的数据时intSet会进行一个扩容操作。为了确保每一个元素编码风格统一方便将来寻址,在扩容时所有元素都会一起调整如下图。
扩容前:
扩容后:
查看intSet的add方法里面会调用扩容方法intsetUpgradeAndAdd
查看intsetUpgradeAndAdd代码
为了确保set集合有序,插入时会在当前intset中用二分查找与value一样的元素角标pos
最后总结:
Intset可以看做是特殊的整数数组,具备一些特点:
评论