问答详情
源自:5-2 HashTable巧妙设计实战

什么是packed array,什么是hash array,区别是什么?

什么是packed array,什么是hash array,区别是什么?

提问者:Pursue丶昔年 2018-12-19 14:46

个回答

  • 陈雷
    2018-12-19 17:59:29

    可以这么简单的理解:

    1、对于key是数字的,就不用涉及到hash运算,此时使用的是packed array; 当然如果key的值较大,或者间隔较大,还是会退化成hash array。  packed array 能够节省索引部分占用的内存,是一个性能上的优化;

    2、对于key是非数字的,必须用hash算法进行计算出来它所在bucket的位置,那么索引数组是必不可少的,只能是hash array。

    这是底层的实现,对于我们写php代码,需要关注的点是对于业务中的大数组,有没有可能设计一些算法,让它满足packed array的性质,这样可以节省内存; 另外一方面就是要关注在大数组的情况下,可能会发声packed array向 hash array的转变,这个耗时还是较大的,需要尽量避免这种情况。  当然这两种情况都是针对“大”数组,小数组的情况下,其实差距没那么大。