1.首先,NSSet和NSArray功能性质一样,用于存储对象,属于集合。但是NSSet和NAArray不一样的是它属于 “无序集合”,在内存中存储方式是不连续的,而NSArray是 “有序集合” 它内存中存储位置是连续的。
2.其次,NSSet的效率确实是比NSArray高的,因为它主要用的是hash算法,我的理解中,NSSet在集合中寻找一个元素的时候是一针见血,找到目标顺着就去了;而NSArray的话需要循环集合中所有的对象,来找到所需要的目标。所以,循环所有对象与直接去对象的位置获取,速度就显而易见了。
3. 最后,你额外还需要主意两点
> NSSet,NSArray都是类,只能添加对象,如果需要加入基本数据类型(int,float,BOOL,double等),需要将数据封装成NSNumber类型。
> 由于NSSet是用hash实现的所以就造就了它查询速度比较快,但是我们不能把某某对象存在第几个元素后面之类的有关下标的操作。
无序集合:集合里的元素只能遍历
有序集合:集合里的元素可以根据key或index访问
注意:NSSet有个重要特性,它不能够存储重复的数据,所以用它可以去除重复的值
比较:搜索一个元素,NSSet的效率会比NSArray的高为什么呢?
因为哈希的NSSet中元素的存储和访问都是一个散列的过程,比如你要存储元素A,一个哈希算法直接就能直接找到一个应该存储的位置;同样,当你要访问B时,一个散列过程就能找到一个存储的位置。而对于NSArray的,若想知道甲到底在不在数组中,则需要一个一个元素比较,显然效率没了。
网友评论