工作生活

php数组实现

2019-06-30  本文已影响0人  转过

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会移除已删除元素

上一篇下一篇

猜你喜欢

热点阅读