2010-03-10 47 views
12

我有一個對象列表,我需要儘快找到一個對象(通過它的名稱屬性)。我應該使用什麼數據結構?我知道我可以使用一個字典,但不會超過列表中的10個項目,如果我沒有記錯的話,字典是作爲一個數組實現的,如果集合包含10個或更少的項目。我應該使用10個或更少的項目收集字典,還是有更好的選擇?

謝謝。

+6

對於10個或更少的項目,它可能無所謂你使用什麼類型的結構。 – 2010-03-10 18:46:09

+0

數據結構的選擇取決於大小以外的許多因素。這些元素多久會被插入和刪除?尋找物體的速度有多關鍵?這是否會用在一個緊密的循環?插入和清除的速度有多關鍵? 10個項目是硬性限制還是棒球? – 2010-03-10 18:54:54

+1

你是否分析了你的應用,並確定這是一個性能瓶頸?如果是的話,我會很驚訝。 – TrueWill 2010-03-10 19:17:35

回答

10

MSDN建議ListDictionary與10條以下類別:

這是使用單鏈表的簡單實現的IDictionary的。如果元素的數量是10或更少,它比Hashtable更小更快。如果性能對於大量元素很重要,則不應使用此功能。

+0

+1這聽起來非常完美! – 2010-03-10 18:50:30

+9

由於ListDictionary不是通用的,因此該建議可能已過時。文件說,從一開始。 – 2010-03-10 18:51:46

+0

謝謝安娜,這似乎是我的問題的完美答案。 – 2010-03-10 20:12:43

4

如果您確定只有少於10件物品,您可能需要考慮System.Collections.Specialized.ListDictionary

另外考慮System.Collections.Specialized.HybridDictionary,如果你的假設是錯誤的,那麼如果尺寸增加到閾值以上,則切換行爲(具有小的開銷)。

0

爲什麼不使用散列表?它位於System.Collections命名空間中。

+2

由於Dictionary <>和Hashtable類都是哈希表的實現,並且必須計算每個項目的哈希碼,所以只有當收集不是非常小時才爲自己付出代價的開銷。 – 2010-03-10 18:51:50

2

由於您希望通過屬性進行最快查找,因此您應該使用Dictionary<Key, Value>。如果你想快速查找,大小不會傷害你。並不是只有10件或更少的Dictionary<Key, Value>佔用大量內存。 Dictionary<Key, Value>有一個構造函數,它接受一個int來設置容量。

相關問題