我一直觉得在任何一门语言中,集合都是一个比较重要的概念.我们在处理数据时,大量需要用到集合.前面我们分别介绍了NSArray,NSDictionary,NSSet以及它们的可变形式,NSMutableArray,NSMutableDictionary ,NSMutableSet等.Foundation中集合相关类的继续关系如下图:

Collections
Collections

 

NSArray 用于对象有序集合(相当于是数组) NSSet 用于对象无序集合 NSDictionary 用于键值映射 以上三种集合类是不可变的(一旦初始化后,不能再动态的增加或删除元素),如果需要用到可变集合,则需要用到下面几个类: NSMutableArray NSMutableSet NSMutableDictionary

collections_intro_2x
collections_intro_2x

NSArray和NSSet所实现的基本功能其实都差不多,这和其他语言如java有很大差别,NSArray的存储数据的方式是连续的,后一个数据在内存中是紧接着前一个数据的,而NSSet在存储的时候并不是需要一块连续的内存。

NSSet由于在底层使用hash的思想实现的,所以他就保证了里面存储的对象必须是唯一的,类似于java中的HashSet。而NSArray可以存储相同的几个对象。由于NSSet是用hash实现的所以就造就了它查询速度比较快,但是我们不能把某某对象存在第几个元素后面之类的有关脚标的操作。而NSArray数组可以进行脚标的操作,但是查询速度稍微要慢一些。

Foundation中的字典NSDictionary是由键-值对组成的数据集合,好比java中的Map,在字典对象中key值必须是唯一的,另外字典对象中的键和值都不能为nil。,如果要在字典对象中表示一个空值,可以用NSNull对象(这里主要指值value)。

NSEnumerator类似于NSArray,一般不单独使用。只是作为 NSArray,NSSet 和 NSDictionary 的辅助类(它们都有相应的方法转换为NSEnumerator)。特别要注意 NSEnumerator 中的元素一旦遍历过之后就不能重新遍历,必须重新创建一个NSEnumerator。

 

更多关于集合的介绍:Collections Programming Topics