集合类型

2016-02-28  本文已影响0人  方方1307007

集合类型有三种:

Array数组,基于索引的有序的序列

Set,无序的,而且值是唯一的集合

Dictionary,键值对,Keys只能是唯一的,Values可以是重复的

NSArray被定义为class,引用类型,拷贝时就是指针在拷贝,指向的还是同样的对象

数组封装后具有面向对象特性,索引从0开始,索引访问越界会抛出运行时异常

NSArray的元素必须是对象,即NSObject的子类

如值类型,不能直接放入数组,要用NSNumber来封装为对象类型才可以

1.使用NSNumber将NSInteger包装为对象

2.或使用字面常量初始化

如C语言结构类型,须用NSValue封装为对象类型,才能放入数组

使用NSValue将struct包装为对象

数组元素可以是不同对象类型,可能会有类型不安全

NSArray具有常量性,长度和元素指针都不能更改,但指针指向的对象内部可以更改

两个对象默认只能比较指针是否相等,如果比较对象是否相等,必须重写NSObject的isEqual函数,然后提供值相等的比较

数组遍历,有三种方式:

最快,Fast Enumeration,快速枚举方法,优化索引检查和动态消息分发

较慢,NSEnumerator,迭代器设计模式

最慢,For循环

数组查找

indexOfObject查找值是否相等的对象

indexOfObjectIdenticalTo查找引用相等的对象

数组排序

不改变原数组(常量性),返回新数组

NSMutableArray可变数组

支持更改长度和元素指针,是NSArray的子类

NSMutableArray初始化后,会分配一个缓存容量capacity,一般大于实际容量,长度增加时,capacity会以近似二倍方式增长,代价是分配新的堆内存,长度是以前的两倍,原来堆内存的元素拷贝到新的堆内存上,再释放以前的堆内存

避免方法:给预估容量,避免以后增长

常量集合NSSet是无序集合,存储对象不能重复,被定义为class,也是引用类型

可变集合NSMutableSet,创建时提前设好capacity

集合支持Fast Enumeration和NSEnumerator,前者较快

NSDictionary是存储key-value的无序集合,key唯一,value可重复,被定义为class,引用类型

可变NSMutableDictionary,用initWithCapacity提前设capacity

Dictionary支持Fast Enumeration和NSEnumerator,前者较快

上一篇 下一篇

猜你喜欢

热点阅读