Heim >Backend-Entwicklung >PHP-Problem >Was ist PHP HashTable?

Was ist PHP HashTable?

Guanhui
GuanhuiOriginal
2020-06-24 14:26:212907Durchsuche

Was ist PHP HashTable?

Was ist PHP HashTable?

PHP HashTable bezieht sich auf eine Hash-Tabelle, bei der es sich um eine Datenstruktur handelt, auf die basierend auf dem Schlüsselwert direkt zugegriffen werden kann. Das heißt, es kann auf Datensätze zugreifen, indem der Schlüsselwert einer Position in der Tabelle zugeordnet wird Um die Suche zu beschleunigen, handelt es sich bei dem Array, in dem die Datensätze gespeichert sind, um eine Hash-Tabelle.

Die neue Version von HashTable

Im Vergleich zur alten Version von Hashtable sind die Änderungen ziemlich groß

  • Die Elemente Der Speicher der alten Version ist dezentral. Bucket **arBuckets speichert die Adresse des Zeigers, der auf den Bucket zeigt. Der Elementspeicher der neuen Version ist kontinuierlich Bucket *arData; In der alten Version gibt es 4 Zeiger. In der neuen Version gibt es nur einen Zeiger, der nur bei Hash-Kollisionen verwendet wird.

  • Nehmen wir drei Zeiger weniger Sehen Sie sich an, wie Sie die neue Version von Hashtable verfolgen und Hash-Konflikte lösen können.

  • Sehen Sie sich die Definition von Hashtable an 🎜>

       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;
    	};

    Strukturdiagramm

Empfohlenes Tutorial: „

PHP

Was ist PHP HashTable?

Das obige ist der detaillierte Inhalt vonWas ist PHP HashTable?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn