集合和数组

先进行定义比较:
NSIndexSet是排好序的,无重复的无符号整形集合.
NSSet用于存储对象的集合;
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类型.

NSIndexSet

系统库中用的非常的多.

//NSArray中  
- (NSArray *)objectsAtIndexes:(NSIndexSet *)indexes;  
- (void)enumerateObjectsAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts usingBlock:(void (^)(id obj, NSUInteger idx, BOOLBOOL *stop))block;  
- (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOLBOOL *stop))predicate;
......  
//UITableView中  
- (void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;  
- (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation; 

你可能感兴趣的:(集合和数组)