2010-01-26 53 views
3

我希望能夠創建一個固定大小的哈希表,比如說100個桶,如果我需要存儲超過100個項目,那麼衝突和覆蓋將不得不發生。散列表類具有IsFixedSize屬性,但是它是隻讀的。C#創建一個固定大小的哈希表

我是否完全錯誤地思考這個問題,還是有解決方案?

+0

爲什麼你需要你的hashmap只有100個桶? – 2010-01-26 02:33:33

+0

在我的應用程序中,我有很多可能的輸入,比如說我有100000個可能的輸入。但是,在這個應用程序中,可能只有這些可能投入的〜5%會被看到。我想使用散列表將輸入空間壓縮到固定的內存大小。 – 2010-01-26 02:39:47

+0

有趣的是,在HashTable的基本實現中,IsFixedSize只是返回false。 – 2010-01-26 06:58:37

回答

4

.NET框架中的集合不允許進行很多微調。儘管您可能會發現一個足夠滿足您的需求的效率。在優化之前嘗試一些可行的方法。

如果你沒有自己推出,那麼你可能會發現第三方的替代品具有更多的細粒度控件。例如,請參閱The C5 Generic Collection Library for C# and CLI作爲可能的開始。檢查various Hash* classes on their documentation page

如果您決定推出自己的產品,那麼您將需要爲集合和/或列表,枚舉等實施some of the standard interfaces,以便它們按照預期使用C#foreach以及語言和.NET功能。

如果您有C++實現,並且有在C#/ .NET中使用它的方法,那麼您也可以採用高效的C++實現。這可能需要一些討論,但是有關於如何完成這種事情的答案。