====== Hash ====== **//Inherited from//** NULL **//Inherited by//** NULL **//Friend class//** [[hashiterator|HashIterator]] **//Description//** 存储管理数据地址,使用取模的Hash运算快速定位数据地址。 \\ Hash由基本索引表(Base Index Table,以下简称BIT)和一个用于分配Hash节点的内存池组成,基本索引表的长度表征了Hash的大小。Hash节点(LinkNode)包含两个指针,其中一个指向数据,另一个指向下一个节点。由Hash定位的数据需要提供一个函数(IdGetter)以获取唯一标识它的整型数,将此整型数对基本索引表的长度取模,得到的余数就是该数据在Hash中的索引。原则上该数据的地址存在基本索引表余数对应的位置上,如果有两个数据拥有相同的索引,则将所有的同索引的数据链结起来形成一个链表,除了存放在基本索引表的节点外,其他节点都存储在内存池中。 \\ 为了减小数据冲突,基本索引表的大小应选择适合的质数。 \\ 为了避免嵌套的遍历过程所导致的冲突,对Hash数据的遍历引入到HashIterator完成。 **//Members//** * LinkNode * m_pHashLinkTable * ulong m_ulCount * ulong m_ulModNumber * IdGetter m_pfIdGetter * MemPool * m_pHashPool * bool m_bSelfPool **//Public interface//** * bool insert(void *pData) * void remove(ulong id) * void clear() * void resize(ulong newSize) * void * getData(ulong id) * void * operator [] (ulong id) * K2::ulong getCount() * K2::ulong getSize() ---- see [[thash|THash]]