iOS中的数组、链表
2019-07-11 本文已影响0人
叫我魏大川
数组:有序、下标取值、内存连续。
查找:所以使用下标取值(因为内存连续,且存储单元大小已知,所以可以快速定位下标所在的内存地址)的时候很快能找到,比链表快多了。
插入:但是插入的时候,需要挪动本下标后边的所有内存地址,往后移一个单元。所以如果插入不是在尾部,并且数据量很大的情况下,会比链表慢。但是:OC中的数组对此采用了环形缓冲区的优化,它的作用是可以计算出移动最少的内存来达到目的。比如,如果距离开头近,就会移动头部的内存;距离尾部近,就会移动尾部的内存。而环形缓冲区是靠链表实现的。
链表:有序、本节点保存有下一节点的地址、内存不连续(不能使用下标取值)。
查找:只能从头开始查找,所以查找比数组慢。
插入:插入的成本很低,只需要打断两个节点插入后重新连接上就行,对其他不相关节点毫无影响。比数组快。
所以,app开发中大部分情况下,数组比链表更强更合适,这应该也是为什么链表很少被人使用的原因吧。