深入理解数组:底层实现探究
数组的协议结构

image-20230223225002236.png
Sequence
- 一个序列(sequence)代表的是一系列具有相同类型的值,你可以对这些值进行迭代

image-20230223225156574.png
IteratorProtocol
- Sequence通过创建一个迭代器来提供对元素的访问。迭代器每次产生一个序列的值,并且当遍历序列时对遍历状态进行管理
- 当序列被耗尽时,next()应该返回nil

image-20230223225425579.png
定义自己的Sequence

image-20230223225527781.png
Collection
- 一个Collection是满足下面条件的Sequence
- 稳定的Sequence,能够被多次遍历且保持一直
- 除了线性遍历以外,集合中的元素也可以通过下标索引的方式被获取到
- 和Sequence不同,Collection类型不能是无限的

image-20230223225916071.png
Array的迭代器

image-20230223225955643.png
Array的下标访问

image-20230223230201634.png
Array的buffer

image-20230223230254677.png
_ContiguousArrayBuffer

image-20230223230337486.png
_ContiguousArrayBuffer的getElement

image-20230223230452680.png
UnsateMutablePointer的下标操作

image-20230223230556548.png
问题:endIndex vs count

image-20230223230716982.png
索引

image-20230223230754798.png

image-20230223230928605.png
课后探索
- 学习removeFirst方法的源码,得出removeFirst的复杂度
- 学习sort方法的源码,了解Array的排序方法
网友评论