NSSet到底什麼類型,其實它和NSArray功能性質同樣,用於存儲對象,屬於集合; NSSet , NSMutableSet類聲明編程接口對象,無序的集合,在內存中存儲方式是不連續的,不像NSArray,NSDictionary(都是有序的集合)類聲明編程接口對象是有序集合,在內存中存儲位置是連續的;算法
NSSet和咱們經常使用NSArry區別是:在搜索一個一個元素時NSSet比NSArray效率高,主要是它用到了一個算法hash(散列,也可直譯爲哈希);開發文檔中這樣解釋: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應該存儲的位置;一樣,當你要訪問A時,一個hash過程就能找到A存儲的位置。而對於NSArray,若想知道A到底在不在數組中,則須要便利整個數組,顯然效率較低了;數組
NSSet,NSArray都是類,只能添加cocoa對象,若是須要加入基本數據類型(int,float,BOOL,double等),須要將數據封裝成NSNumber類型。ide
NSSet 經常使用方法總結spa
+(id)setWithObjects:obj1,obj2,...nil | 使用一組對象建立新的集合 |
-(id)initWithObjects:obj1,obj2,....nil | 使用一組對象初始化新分配的集合 |
-(NSUInteger)count | 返回集合成員個數 |
-(BOOL)containsObject:obj | 肯定集合是否包含對象 obj |
-(BOOL)member:obj | 肯定集合是否包含對象 obj |
-(NSEnumerator*)objectEnumerator | 返回集合中全部對象到一個 NSEnumerator 類型的對象 |
-(BOOL)isSubsetOfSet:nsset | 判斷集合是不是NSSet的子集 |
-(BOOL)intersectsSet:nsset | 判斷兩個集合的交集是否至少存在一個元素 |
-(BOOL)isEqualToSet:nsset | 判斷兩個集合是否相等 |
NSMutableSet 經常使用方法總結.net
-(id)setWithCapcity:size | 建立一個有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 作交集運算 |