2009-02-13 24 views
3

我一直在使用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

<非常嚴重>我做了,但他也不知道。 2009-02-13 22:29:04

回答

6

TBucketListTObjectBucketList存儲指針闡述了這一類特殊的細微差別。他們使用的散列函數只是掩蓋了地址的高位。有多少位被屏蔽取決於該對象具有多少個桶。例如,如果使用bl2,則31位被屏蔽掉,只有一位地址確定存儲桶。用bl256,指針的整個字節被使用。它是中間兩個字節之一。權衡就是您將擁有的桶的數量。一個桶只需要八個字節,因此其中有256個並不是一個巨大的成本。

除此之外,TBucketList只是一個普通的散列表,就像您在數據結構類中學到的一樣。

TIntegerBucketList使用與其他散列函數相同的散列函數。如果您想要更復雜的散列函數,請編寫TCustomBucketList的後代並覆蓋BucketFor方法。在您的後代課程中,您還可以指定受保護的BucketCount屬性以使用除TBucketList提供的計數之外的其他屬性。請注意,由於存儲桶計數發生變化,課程不會重新分配項目,因此除非您計劃自行重新分配項目,否則在項目已添加到列表中後不要重新分配BucketCount