集合類型有三種:
Array數(shù)組,基于索引的有序的序列
Set,無序的,而且值是唯一的集合
Dictionary,鍵值對,Keys只能是唯一的,Values可以是重復(fù)的
NSArray被定義為class,引用類型,拷貝時(shí)就是指針在拷貝,指向的還是同樣的對象
數(shù)組封裝后具有面向?qū)ο筇匦?索引從0開始,索引訪問越界會拋出運(yùn)行時(shí)異常
NSArray的元素必須是對象,即NSObject的子類
如值類型,不能直接放入數(shù)組,要用NSNumber來封裝為對象類型才可以
1.使用NSNumber將NSInteger包裝為對象
2.或使用字面常量初始化
如C語言結(jié)構(gòu)類型,須用NSValue封裝為對象類型,才能放入數(shù)組
使用NSValue將struct包裝為對象
數(shù)組元素可以是不同對象類型,可能會有類型不安全
NSArray具有常量性,長度和元素指針都不能更改,但指針指向的對象內(nèi)部可以更改
兩個(gè)對象默認(rèn)只能比較指針是否相等,如果比較對象是否相等,必須重寫NSObject的isEqual函數(shù),然后提供值相等的比較
數(shù)組遍歷,有三種方式:
最快,Fast Enumeration,快速枚舉方法,優(yōu)化索引檢查和動(dòng)態(tài)消息分發(fā)
較慢,NSEnumerator,迭代器設(shè)計(jì)模式
最慢,For循環(huán)
數(shù)組查找
indexOfObject查找值是否相等的對象
indexOfObjectIdenticalTo查找引用相等的對象
數(shù)組排序
不改變原數(shù)組(常量性),返回新數(shù)組
NSMutableArray可變數(shù)組
支持更改長度和元素指針,是NSArray的子類
NSMutableArray初始化后,會分配一個(gè)緩存容量capacity,一般大于實(shí)際容量,長度增加時(shí),capacity會以近似二倍方式增長,代價(jià)是分配新的堆內(nèi)存,長度是以前的兩倍,原來堆內(nèi)存的元素拷貝到新的堆內(nèi)存上,再釋放以前的堆內(nèi)存
避免方法:給預(yù)估容量,避免以后增長
常量集合NSSet是無序集合,存儲對象不能重復(fù),被定義為class,也是引用類型
可變集合NSMutableSet,創(chuàng)建時(shí)提前設(shè)好capacity
集合支持Fast Enumeration和NSEnumerator,前者較快
NSDictionary是存儲key-value的無序集合,key唯一,value可重復(fù),被定義為class,引用類型
可變NSMutableDictionary,用initWithCapacity提前設(shè)capacity
Dictionary支持Fast Enumeration和NSEnumerator,前者較快