- 首先,NSSet和NSArray功能性質(zhì)一樣,用于存儲對象若厚,屬于集合。但是和NAArray不一樣的是它屬于 “無序集合”苞俘,在內(nèi)存中存儲方式是不連續(xù)的盹沈,而NSArray是 “有序集合” 它內(nèi)存中存儲位置是連續(xù)的。
- 其次吃谣,NSSet的效率確實是比NSArray高的乞封,因為它主要用的是hash算法,我的理解中岗憋,NSSet在集合中尋找一個元素的時候是一針見血肃晚,找到目標順著就去了;而NSArray的話需要循環(huán)集合中所有的對象仔戈,來找到所需要的目標关串。所以,循環(huán)所有對象與直接去對象的位置獲取监徘,速度就顯而易見了晋修。
- 最后,你額外還需要主意兩點
1.NSSet凰盔,NSArray都是類墓卦,只能添加對象,如果需要加入基本數(shù)據(jù)類型(int户敬,float落剪,BOOL,double等)尿庐,需要將數(shù)據(jù)封裝成NSNumber類型忠怖。
2.由于NSSet是用hash實現(xiàn)的所以就造就了它查詢速度比較快,但是我們不能把某某對象存在第幾個元素后面之類的有關下標的操作抄瑟。
hash:散列凡泣,也可直譯為“哈希”,我不知道怎么說他问麸,有興趣可以百度百科一下
無序集合:集合里的元素只能遍歷
有序集合:集合里的元素可以根據(jù)key或index訪問
NSSet 常用方法總結
+(id)setWithObjects:obj1,obj2,...nil 使用一組對象創(chuàng)建新的集合
-(id)initWithObjects:obj1,obj2,....nil 使用一組對象初始化新分配的集合
-(NSUInteger)count 返回集合成員個數(shù)
-(BOOL)containsObject:obj 確定集合是否包含對象 obj
-(BOOL)member:obj 確定集合是否包含對象 obj
-(NSEnumerator*)objectEnumerator 返回集合中所有對象到一個 NSEnumerator 類型的對象
-(BOOL)isSubsetOfSet:nsset 判斷集合是否是NSSet的子集
-(BOOL)intersectsSet:nsset 判斷兩個集合的交集是否至少存在一個元素
-(BOOL)isEqualToSet:nsset 判斷兩個集合是否相等
NSMutableSet 常用方法總結
-(id)setWithCapcity:size 創(chuàng)建一個有size大小的新集合
-(id)initWithCapcity:size 初始化一個新分配的集合往衷,大小為size
-(void)addObject:obj 添加對象 obj 到集合中
-(void)removeobject:obj 從集合中刪除對象 obj
-(void)removeAllObjects 刪除集合中所有對象
-(void)unionSet:nsset 將nsset的所有元素添加到集合
-(void)minusSet:nsset 從集合中去掉所有的NSSet 的元素
-(void)interectSet:nsset 集合和NSSet 做交集運算