我一直在使用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來滿足我所有的散列需求,但從來沒有通過切換桶的數量來體驗。我依稀記得這是什麼,從數據結構類的手段,但也有人在德爾福如何判斷桶的數量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