如何判断桶的数量TBucketList

问题描述:

我一直在使用TBucketList和TObjectBucketList来满足我所有的散列需求,但从来没有通过切换桶的数量来体验。我依稀记得这是什么,从数据结构类的手段,但也有人在德尔福如何判断桶的数量TBucketList

 
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 
+0

只是问摩根弗里曼 2009-02-13 22:09:40

+0

我做了,但他也不知道。 very serious> – 2009-02-13 22:29:04

TBucketListTObjectBucketList存储指针阐述了这一类特殊的细微差别。他们使用的散列函数只是掩盖了地址的高位。有多少位被屏蔽取决于该对象具有多少个桶。例如,如果使用bl2,则31位被屏蔽掉,只有一位地址确定存储桶。用bl256,指针的整个字节被使用。它是中间两个字节之一。权衡就是您将拥有的桶的数量。一个桶只需要八个字节,因此其中有256个并不是一个巨大的成本。

除此之外,TBucketList只是一个普通的散列表,就像您在数据结构类中学到的一样。

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