深入理解数组:底层实现探究
数组的协议结构
![](https://img.haomeiwen.com/i1367029/2512c90b96df0275.png)
image-20230223225002236.png
Sequence
- 一个序列(sequence)代表的是一系列具有相同类型的值,你可以对这些值进行迭代
![](https://img.haomeiwen.com/i1367029/a05b4b864a881288.png)
image-20230223225156574.png
IteratorProtocol
- Sequence通过创建一个迭代器来提供对元素的访问。迭代器每次产生一个序列的值,并且当遍历序列时对遍历状态进行管理
- 当序列被耗尽时,next()应该返回nil
![](https://img.haomeiwen.com/i1367029/5bffcb7e7d9f05cf.png)
image-20230223225425579.png
定义自己的Sequence
![](https://img.haomeiwen.com/i1367029/8b67f91e198e6584.png)
image-20230223225527781.png
Collection
- 一个Collection是满足下面条件的Sequence
- 稳定的Sequence,能够被多次遍历且保持一直
- 除了线性遍历以外,集合中的元素也可以通过下标索引的方式被获取到
- 和Sequence不同,Collection类型不能是无限的
![](https://img.haomeiwen.com/i1367029/95b37e945cea97f1.png)
image-20230223225916071.png
Array的迭代器
![](https://img.haomeiwen.com/i1367029/3296cfef5ce7976f.png)
image-20230223225955643.png
Array的下标访问
![](https://img.haomeiwen.com/i1367029/50924d659f975291.png)
image-20230223230201634.png
Array的buffer
![](https://img.haomeiwen.com/i1367029/be4e793ec77d338f.png)
image-20230223230254677.png
_ContiguousArrayBuffer
![](https://img.haomeiwen.com/i1367029/109c739e224c8630.png)
image-20230223230337486.png
_ContiguousArrayBuffer的getElement
![](https://img.haomeiwen.com/i1367029/3033444f1a9a6cbd.png)
image-20230223230452680.png
UnsateMutablePointer的下标操作
![](https://img.haomeiwen.com/i1367029/e11c73f643b8fdff.png)
image-20230223230556548.png
问题:endIndex vs count
![](https://img.haomeiwen.com/i1367029/7a74a28f34c6f306.png)
image-20230223230716982.png
索引
![](https://img.haomeiwen.com/i1367029/b5c6fbc6a84426ff.png)
image-20230223230754798.png
![](https://img.haomeiwen.com/i1367029/fdc60c0066c9cce1.png)
image-20230223230928605.png
课后探索
- 学习removeFirst方法的源码,得出removeFirst的复杂度
- 学习sort方法的源码,了解Array的排序方法
网友评论