NSSet到底什么類型?
其實(shí)它和NSArray功能性質(zhì)一樣裹赴,用于存儲(chǔ)對(duì)象,屬于集合诀浪;
NSSet 棋返, NSMutableSet類聲明編程接口對(duì)象,無(wú)序的集合雷猪,在內(nèi)存中存儲(chǔ)方式是不連續(xù)的
像NSArray睛竣,NSDictionary(都是有序的集合)類聲明編程接口對(duì)象是有序集合,在內(nèi)存中存儲(chǔ)位置是連續(xù)的求摇;
NSSet和我們常用NSArry區(qū)別是:在搜索一個(gè)一個(gè)元素時(shí)NSSet比NSArray效率高射沟,主要是它用到了一個(gè)算法hash(散列,也可直譯為哈希)与境;
開發(fā)文檔中這樣解釋:You can use sets as an alternative to arrays when the order of elements isn’t important and performance in testing whether an object is contained in the set is a consideration—while arrays are ordered, testing for membership is slower than with sets.
比如你要存儲(chǔ)元素A躏惋,一個(gè)hash算法直接就能直接找到A應(yīng)該存儲(chǔ)的位置;同樣嚷辅,當(dāng)你要訪問(wèn)A時(shí),一個(gè)hash過(guò)程就能找到A存儲(chǔ)的位置距误。而對(duì)于NSArray簸搞,若想知道A到底在不在數(shù)組中,則需要便利整個(gè)數(shù)組准潭,顯然效率較低了趁俊;
NSSet,NSArray都是類刑然,只能添加cocoa對(duì)象寺擂,如果需要加入基本數(shù)據(jù)類型(int,float,BOOL怔软,double等)垦细,需要將數(shù)據(jù)封裝成NSNumber類型。
NSSet 常用方法總結(jié)
+(id)setWithObjects:obj1,obj2,...nil 使用一組對(duì)象創(chuàng)建新的集合
-(id)initWithObjects:obj1,obj2,....nil 使用一組對(duì)象初始化新分配的集合
-(NSUInteger)count 返回集合成員個(gè)數(shù)
-(BOOL)containsObject:obj 確定集合是否包含對(duì)象 obj
-(BOOL)member:obj 確定集合是否包含對(duì)象 obj
-(NSEnumerator*)objectEnumerator 返回集合中所有對(duì)象到一個(gè) NSEnumerator 類型的對(duì)象
-(BOOL)isSubsetOfSet:nsset 判斷集合是否是NSSet的子集
-(BOOL)intersectsSet:nsset 判斷兩個(gè)集合的交集是否至少存在一個(gè)元素
-(BOOL)isEqualToSet:nsset 判斷兩個(gè)集合是否相等
NSMutableSet 常用方法總結(jié)
-(id)setWithCapcity:size 創(chuàng)建一個(gè)有size大小的新集合
-(id)initWithCapcity:size 初始化一個(gè)新分配的集合挡逼,大小為size
-(void)addObject:obj 添加對(duì)象 obj 到集合中
-(void)removeobject:obj 從集合中刪除對(duì)象 obj
-(void)removeAllObjects 刪除集合中所有對(duì)象
-(void)unionSet:nsset 將nsset的所有元素添加到集合
-(void)minusSet:nsset 從集合中去掉所有的NSSet 的元素
-(void)interectSet:nsset 集合和NSSet 做交集運(yùn)算