PHP7底層設計與源碼——數組的實現

基本概念

  1. PHP中數組是個強大的數據結構,堪稱一絕,數組、關聯數組一網打盡,既可以是連續的數組也可以是存儲key=>value映射的map。
  2. PHP使用HashTable來存儲鍵-值對,但是又對HashTable進行了一些額外的設計來保證數組的有序,維護着K-V的一種對應關係,可以快速地根據鍵來檢索到值,而且查找地時間複雜度爲O(1)
  3. HashTable示意圖:
  • key: 可以是數字也可以是字符串
  • value:目標數據
  • bucket:桶,hashtable地存儲單元,一個用來存儲k-v的容器
  • slot: 槽,一個slot可以擁有一個bucket或者多個
  • 當存在hash衝突的時候,PHP採用的是鏈地址法來解決,將同一個slot中的bucket通過鏈表連接起來(如圖所示)
  1. 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中的數組

未完待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章