如何判断TBucketList的桶数

Pet*_*ner 3 delphi hashtable tbucketlist

我一直在使用TBucketList和TObjectBucketList来满足我所有的哈希需求,但从未体验过切换桶的数量.我依稀记得Data Structures类中的含义,但有人可能会详细阐述Delphi中这个特定类的细微差别

The following table lists the possible values:

Value   Number of buckets

bl2   2
bl4   4
bl8   8
bl16     16
bl32     32
bl64     64
bl128   128
bl256   256

Rob*_*edy 6

TBucketListTObjectBucketList存储指针.他们使用的哈希函数简单地掩盖了地址的高位.被掩盖的位数取决于对象具有多少桶.bl2例如,如果使用,则会屏蔽31位,并且只有一位地址确定存储区.使用时bl256,指针的整个字节被使用.它是中间两个字节之一.权衡就是你拥有的桶数.一个桶只需要8个字节,因此拥有256个字节并不是一个巨大的成本.

除此之外,TBucketList它只是您在数据结构类中学到的普通哈希表.

TIntegerBucketList使用与其他哈希函数相同的哈希函数.如果您想要更复杂的哈希函数,请编写后代TCustomBucketList并覆盖该BucketFor方法.在您的后代类中,您还可以将受保护的BucketCount属性指定为使用除提供的计数之外的其他内容TBucketList.请注意,由于存储桶计数的更改,类不会重新分配项目,因此BucketCount在项目已添加到列表后不要重新分配,除非您打算自己进行重新分配.