如何判断TBucketList的桶数

时间:2009-02-13 22:06:16

标签: 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

1 个答案:

答案 0 :(得分:6)

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

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

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