考慮內存中的一組數千個NSString
對象。高效搜索集合中的NSString
在集合中搜索特定NSString
的最有效方法是什麼?使用NSDictionary
就足夠了嗎?還是保證NSSet
的搜索是O(1)(找不到任何說明的文檔)?
而且相同的策略是否適用於NSData
對象?
考慮內存中的一組數千個NSString
對象。高效搜索集合中的NSString
在集合中搜索特定NSString
的最有效方法是什麼?使用NSDictionary
就足夠了嗎?還是保證NSSet
的搜索是O(1)(找不到任何說明的文檔)?
而且相同的策略是否適用於NSData
對象?
This page顯示有關套以下注意事項:
注意:如果在集中的對象有一個好的哈希函數,訪問一個元素,設置元素,並且移除元素都需要一定的時間。使用較差的散列函數(導致頻繁散列衝突的函數),這些操作佔用線性時間。 NSString等屬於Foundation的類有很好的散列函數。
因此,對於NSString
,您可以根據上述內容預計恆定時間。
NSSet
在其實現中使用散列表,並測試散列衝突中所有元素之間是否相等。因此,性能直接關係到其元素的哈希效率。
你想要做什麼?如果你只是想確定一個字符串(或數據)是否在集合中,那就是'NSSet'的用途。如果您想要檢索與字符串(或數據)關聯的其他對象,請使用'NSDictionary'。它們是針對不同需求的不同數據結構。 –
快速枚舉是一個不錯的選擇? – Exploring
@KurtRevis我只想知道元素是否屬於該集合。但是,在任何情況下,我都找不到NSSet的搜索順序爲O(1)的任何確認。 – hpique