Beauty Of Algorithms 7 Summary. Array Or List
Jan 28, 2019#Algorithms
选择数组还是链表
插入、删除和随机访问的时间复杂度
数组的缺点
- 若申请内存空间很大,比如 100 M ,但若内存空间没有 100 M 的连续空间是,则会申请失败,尽管内存可用空间超过 100 M 。
- 大小固定,若空间存储不足,需要进行扩容,一旦扩容就要进行数据复杂,而这是非常费时的。
链表的缺点
- 内存空间消耗更大,因为需要额外的空间存储指针信息。
- 对链表进行频繁的插入和删除操作,会导致频繁的内存申请和释放,容易造成内存碎片,如果是 Java 语言,还可能会造成频繁的 GC (自动辣鸡回收器) 操作。
如何选择链表和数组
数组简单易用,在实现上使用连续的内存空间,可以借助 CPU 的缓冲机制预读数组中的数据,所以访问效率更高。
而链表在内存中并不是连续存储的,所以为 CPU 缓存不友好,没办法预读。
如果代码对内存的使用非常苛刻,那数组就更适合。