[非原创]iOS_NSSet与NSArray的区别

http://blog.csdn.net/siwen1990 转载

首先,NSSet和NSArray功能性质一样,用于存储对象,属于集合。但是和NAArray不一样的是它属于 “无序集合”,在内存中存储方式是不连续的,而NSArray是 “有序集合” 它内存中存储位置是连续的。

其次,NSSet的效率确实是比NSArray高的,因为它主要用的是hash算法,我的理解中,NSSet在集合中寻找一个元素的时候是一针见血,找到目标顺着就去了;而NSArray的话需要循环集合中所有的对象,来找到所需要的目标。所以,循环所有对象与直接去对象的位置获取,速度就显而易见了。

最后,你额外还需要主意两点

1.NSSet,NSArray都是类,只能添加对象,如果需要加入基本数据类型(int,float,BOOL,double等),需要将数据封装成NSNumber类型。

2.由于NSSet是用hash实现的所以就造就了它查询速度比较快,但是我们不能把某某对象存在第几个元素后面之类的有关下标的操作。

hash:散列,也可直译为“哈希”,我不知道怎么说他,有兴趣可以百度百科一下

无序集合:集合里的元素只能遍历

有序集合:集合里的元素可以根据key或index访问

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 做交集运算

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 记得之前数组去重经常用NSSet来实现,可是觉得自己并不是很了解NSSet,如今有时间研究了一下NSSet,写篇小...
    海耐射手阅读 2,276评论 0 0
  • 记录-- 下面的例子以 NSArray *array = [NSArray arrayWithObjects:@"...
    北极圈生物阅读 5,794评论 0 1
  • 首先来看看开发语言中集合的概念,把一些能够确定的不同的对象看成一个整体,那么就可以说这个整体是由这些对象全体构成的...
    SankQin阅读 3,280评论 0 0
  • 第三章 字符串 一些有用的数据类型:表示范围作用的结构体:NSRange:有三种方式创建新的 NSRange 1、...
    一个人的思考阅读 288评论 0 2
  • 1.发现,今天不断放屁打嗝…… 2.发现,今天没有消极暗示信号 3.发现,一切外在追求要建立在载体舒服舒畅的感觉上...
    舒小曼laraine阅读 205评论 0 1