[PHP] PHP数组的哈希表实现

1.HashTable中的有个字段记录元素个数,每插入一个元素或者unset删掉元素时会更新这个字段。这样在进行count()函数统计数组元素个数时就能快速的返回。

2.在PHP中可以使用字符串或者数字作为数组的索引 , 数字索引直接就可以作为哈希表的索引,数字也无需进行哈希处理 , 在PHP数组中如果索引字符串可以被转换成数字也会被转换成数字索引。所以在PHP中例如'10','11'这类的字符索引和数字索引10, 11没有区别。

 

3.数组在插入元素的时候 , 会把字符串key计算出一个索引值 , 如果索引值中有数据 , 就在该索引位置存放一个链表 ,  把新元素插到链表头上

但是, 元素bucket中存放着整个哈希表的链表指针 , 整个哈希表的链表顺序是按照插入的顺序进行链接的, 注意下图的红线 , 因此在foreach遍历时 , 会按照插入顺序进行输出

4.当哈希表设置的数组个数满了时 , 再插入元素会进行数组扩容 , 有个二倍扩容的机制 , 并且需要把原先里面的元素从新哈希到新的数组里 .

 

posted @ 2020-12-29 11:47  陶士涵  阅读(36)  评论(0编辑  收藏