基本概念
- PHP中數組是個強大的數據結構,堪稱一絕,數組、關聯數組一網打盡,既可以是連續的數組也可以是存儲key=>value映射的map。
- PHP使用HashTable來存儲鍵-值對,但是又對HashTable進行了一些額外的設計來保證數組的有序,維護着K-V的一種對應關係,可以快速地根據鍵來檢索到值,而且查找地時間複雜度爲O(1)
- HashTable示意圖:
- key: 可以是數字也可以是字符串
- value:目標數據
- bucket:桶,hashtable地存儲單元,一個用來存儲k-v的容器
- slot: 槽,一個slot可以擁有一個bucket或者多個
- 當存在hash衝突的時候,PHP採用的是鏈地址法來解決,將同一個slot中的bucket通過鏈表連接起來(如圖所示)
- PHP中的hashtable的改進
- 首先是再桶中新增h字段
- 再把hash函數拆分爲hash1和hash2
- hash1:將key映射爲h值
- hash2:將h值映射爲slot中的索引值 - 這樣桶中的key全部都是字符串的key
爲什麼要進行拆分?
①將key可能爲字符串也可能爲數字的情況分開,桶中的h爲數字的key,key爲字符串的key
②用hash1生成的hash值(h)可以加快字符串key之間的比較速度,由於計算出來的hash值是不相同的,所以每次進行插入查找不用先檢查key是否有重複,所以可以用來提高速度
PHP7中的數組
未完待續