91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中的HashTable是指什么

發布時間:2020-06-24 15:58:51 來源:億速云 閱讀:127 作者:元一 欄目:編程語言

這期內容當中的小編將會給大家帶來有關PHP中HashTable的介紹,以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

HashTable是什么?

Hashtable 的實例有兩個參數影響其性能:初始容量 和加載因子。容量 是哈希表中桶 的數量,初始容量 就是哈希表創建時的容量。注意,哈希表的狀態為 open:在發生"哈希沖突"的情況下,單個桶會存儲多個條目,這些條目必須按順序搜索。加載因子 是對哈希表在其容量自動增加之前可以達到多滿的一個尺度。初始容量和加載因子這兩個參數只是對該實現的提示。關于何時以及是否調用 rehash 方法的具體細節則依賴于該實現。

常見功能

在哈希表中添加一個key/鍵值對:HashtableObject.Add(key,);

在哈希表中去除某個key/鍵值對:HashtableObject.Remove(key);

從哈希表中移除所有元素: HashtableObject.Clear();

判斷哈希表是否包含特定鍵key: HashtableObject.Contains(key);

下面控制臺程序將包含以上所有操作:

新版本的HashTable

與老版本的hashtable相比改動還是挺大的

  • 老版本的元素存儲是分散的,Bucket **arBuckets 里面存儲的是指針 指向bucket的地址,新版的的元素存儲是連續的 Bucket *arData;

  • 老版本bucket中有4個指針 新版版中的bucket中只有一個指針,并且只有在hash碰撞的時候才會用到

  • 少了三個指針,看下新版本的hashtable 如何做好按照插入順序遍歷和解決hash沖突

看下hashtable的定義

   typedef struct _zend_array HashTable;
   
	struct _zend_array {
		zend_refcounted_h gc;        //  gc 相關
		union {                           //  聯合體 
			struct { 
				ZEND_ENDIAN_LOHI_4(
					zend_uchar    flags,
					zend_uchar    nApplyCount,
					zend_uchar    nIteratorsCount,
					zend_uchar    consistency)
			} v;
			uint32_t flags;
		} u;
		uint32_t          nTableMask;          //  hash表的掩碼 用來確定hsh
		Bucket           *arData;                    // bucket數組
		uint32_t         *arHash;              // hashtable 查找  大小為nTableMask 存放指向bucket的指針(疑問在源碼定義中未看到)
		uint32_t          nNumUsed;            //  元素個數 包含已刪除的元素
		uint32_t          nNumOfElements;    //  有效的元素個數
		uint32_t          nTableSize;      //  hash表的大小
		uint32_t          nInternalPointer;     
		zend_long         nNextFreeElement;
		dtor_func_t       pDestructor;
	};

bucket的定義

typedef struct _Bucket {
	zval              val;           
	zend_ulong        h;         //存的hash 值 用來尋找對比key
	zend_string      *key;           // 如果key是string 則存放key 如果是數字 則為空
} Bucket;

typedef struct _zval_struct     zval;
struct _zval_struct {
	zend_value        value;			// value 真正的結構
	union {
		struct {
			ZEND_ENDIAN_LOHI_4(
				zend_uchar    type,			/* active type */
				zend_uchar    type_flags,
				zend_uchar    const_flags,
				zend_uchar    reserved)	    /* call info for EX(This) */
		} v;
		uint32_t type_info;
	} u1;
	union {
		uint32_t     next;                   // 重點關注這個  存放hash 沖突下一個元素的位置
		uint32_t     cache_slot;           /* literal cache slot */
		uint32_t     lineno;               /* line number (for ast nodes) */
		uint32_t     num_args;             /* arguments number for EX(This) */
		uint32_t     fe_pos;               /* foreach position */
		uint32_t     fe_iter_idx;          /* foreach iterator index */
		uint32_t     access_flags;         /* class constant access flags */
		uint32_t     property_guard;       /* single property guard */
		uint32_t     extra;                /* not further specified */
	} u2;

結構圖

PHP中的HashTable是指什么

上述就是小編為大家分享的PHP中的HashTable是,如果您也有類似的疑惑,不妨礙參照上述分析進行理解。如果想了解更多相關內容,請關注億速云行業資訊。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

肃宁县| 南陵县| 莒南县| 岳普湖县| 喀喇沁旗| 东明县| 固阳县| 泽州县| 平凉市| 峡江县| 古浪县| 浦城县| 永仁县| 沈阳市| 湘乡市| 景洪市| 门头沟区| 巫山县| 永和县| 多伦县| 菏泽市| 崇仁县| 上栗县| 桐城市| 阿鲁科尔沁旗| 罗平县| 阿坝县| 林芝县| 朝阳县| 嘉义县| 古浪县| 公安县| 四子王旗| 米易县| 潍坊市| 雷山县| 宁波市| 共和县| 射阳县| 安西县| 凉城县|