NSSet到底什么類型,其實它和NSArray功能性質(zhì)一樣辣恋,用于存儲對象亮垫,屬于集合模软; NSSet , NSMutableSet類聲明編程接口對象饮潦,無序的集合燃异,在內(nèi)存中存儲方式是不連續(xù)的,不像NSArray(是有序的集合)類聲明編程接口對象是有序集合继蜡,在內(nèi)存中存儲位置是連續(xù)的回俐;
NSSet和我們常用NSArry區(qū)別是:在搜索一個一個元素時NSSet比NSArray效率高,主要是它用到了一個算法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.
比如你要存儲元素A,一個hash算法直接就能直接找到A應(yīng)該存儲的位置碘举;同樣忘瓦,當你要訪問A時,一個hash過程就能找到A存儲的位置引颈。而對于NSArray耕皮,若想知道A到底在不在數(shù)組中,則需要便利整個數(shù)組蝙场,顯然效率較低了凌停;
NSSet,NSArray都是類售滤,只能添加cocoa對象苦锨,如果需要加入基本數(shù)據(jù)類型(int,float趴泌,BOOL舟舒,double等),需要將數(shù)據(jù)封裝成NSNumber類型嗜憔。-
常用用法總結(jié)
+(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 常用方法總結(jié)
-(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 做交集運算