NSArray和NSSet的區別


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類型。

NSSet 常用方法總結
+(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 常用方法總結
-(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 做交集運算


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM