真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PHP中的HashTable是指什么

這期內(nèi)容當(dāng)中的小編將會給大家?guī)碛嘘P(guān)PHP中HashTable的介紹,以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站與策劃設(shè)計(jì),銀海網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:銀海等地區(qū)。銀海做網(wǎng)站價(jià)格咨詢:18980820575

HashTable是什么?

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

常見功能

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

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

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

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

下面控制臺程序?qū)陨纤胁僮?

新版本的HashTable

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

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

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

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

看下hashtable的定義

   typedef struct _zend_array HashTable;
   
	struct _zend_array {
		zend_refcounted_h gc;        //  gc 相關(guān)
		union {                           //  聯(lián)合體 
			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數(shù)組
		uint32_t         *arHash;              // hashtable 查找  大小為nTableMask 存放指向bucket的指針(疑問在源碼定義中未看到)
		uint32_t          nNumUsed;            //  元素個(gè)數(shù) 包含已刪除的元素
		uint32_t          nNumOfElements;    //  有效的元素個(gè)數(shù)
		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 如果是數(shù)字 則為空
} Bucket;

typedef struct _zval_struct     zval;
struct _zval_struct {
	zend_value        value;			// value 真正的結(jié)構(gòu)
	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;                   // 重點(diǎn)關(guān)注這個(gè)  存放hash 沖突下一個(gè)元素的位置
		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;

結(jié)構(gòu)圖

PHP中的HashTable是指什么

上述就是小編為大家分享的PHP中的HashTable是,如果您也有類似的疑惑,不妨礙參照上述分析進(jìn)行理解。如果想了解更多相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊。


本文題目:PHP中的HashTable是指什么
文章轉(zhuǎn)載:http://weahome.cn/article/pdoieg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部