Heim >Backend-Entwicklung >PHP-Problem >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
PHP
“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!