2013-02-01 61 views
5

考慮內存中的一組數千個NSString對象。高效搜索集合中的NSString

在集合中搜索特定NSString的最有效方法是什麼?使用NSDictionary就足夠了嗎?還是保證NSSet的搜索是O(1)(找不到任何說明的文檔)?

而且相同的策略是否適用於NSData對象?

+1

你想要做什麼?如果你只是想確定一個字符串(或數據)是否在集合中,那就是'NSSet'的用途。如果您想要檢索與字符串(或數據)關聯的其他對象,請使用'NSDictionary'。它們是針對不同需求的不同數據結構。 –

+0

快速枚舉是一個不錯的選擇? – Exploring

+0

@KurtRevis我只想知道元素是否屬於該集合。但是,在任何情況下,我都找不到NSSet的搜索順序爲O(1)的任何確認。 – hpique

回答

4

This page顯示有關套以下注意事項:

注意:如果在集中的對象有一個好的哈希函數,訪問一個元素,設置元素,並且移除元素都需要一定的時間。使用較差的散列函數(導致頻繁散列衝突的函數),這些操作佔用線性時間。 NSString等屬於Foundation的類有很好的散列函數。

因此,對於NSString,您可以根據上述內容預計恆定時間。

0

NSSet在其實現中使用散列表,並測試散列衝突中所有元素之間是否相等。因此,性能直接關係到其元素的哈希效率。