php数组实现

作者: 转过 | 来源:发表于2019-06-30 23:15 被阅读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会移除已删除元素

    相关文章

      网友评论

        本文标题:php数组实现

        本文链接:https://www.haomeiwen.com/subject/oamicctx.html