如何判断桶的数量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
答
TBucketList
和TObjectBucketList
存储指针阐述了这一类特殊的细微差别。他们使用的散列函数只是掩盖了地址的高位。有多少位被屏蔽取决于该对象具有多少个桶。例如,如果使用bl2
,则31位被屏蔽掉,只有一位地址确定存储桶。用bl256
,指针的整个字节被使用。它是中间两个字节之一。权衡就是您将拥有的桶的数量。一个桶只需要八个字节,因此其中有256个并不是一个巨大的成本。
除此之外,TBucketList
只是一个普通的散列表,就像您在数据结构类中学到的一样。
TIntegerBucketList
使用与其他散列函数相同的散列函数。如果您想要更复杂的散列函数,请编写TCustomBucketList
的后代并覆盖BucketFor
方法。在您的后代课程中,您还可以指定受保护的BucketCount
属性以使用除TBucketList
提供的计数之外的其他属性。请注意,由于存储桶计数发生变化,课程不会重新分配项目,因此除非您计划自行重新分配项目,否则在项目已添加到列表中后不要重新分配BucketCount
。
我做了,但他也不知道。 very serious> – 2009-02-13 22:29:04