php5使用全局链表维护hashtable的有序性
foreach和for效率
foreach根据连续内存数组下标遍历,for遍历每次都要经过hash算法查找值,所以foreach效率更高
packed array:纯数组
条件:key全是安插入顺序递增的数字(非连续数字也可以,但会浪费bucket空间,使得成为无效空间
1.不需要索引数组,更节省内存
2.无需计算hash,直接操作bucket数组,性能更高
申请内存2*sizeof(unit32) + nTableSize*sizeof(Bucket)
hash array:hash数组
申请内存nTableSize*sizeof(unit32) + nTableSize*sizeof(Bucket)
packed array插入字符串key时packed array会转换为hash array?删除时会反向转换吗
申请内存
nTableSize最小为8,始终为2的n次方
每次申请当前数组容量的两倍
扩容和rehash - p133
扩容和rehash的时候触发真正的元素删除
1.插入元素当容量不够时检查已删除元素所占比例,达到阈值rehash,否则扩容
2.扩容操作:将当前bucket复制到新的空间,然后rehash
rehash会移除已删除元素
网友评论