时间复杂度 | 数组 | 链表 |
插入、删除 | O(n) | O(1) |
随机访问 | O(1) | O(n) |
数组在实现上使用的是连续的内存空间,可以借助CPU的缓存机制,预读数组中的数据,所以访问效率更高。而连败哦在内存中不连续,所以对CPU缓存不友好,没办法预读。
数组的缺点是大小固定,一经声明就会占用整块连续内存空间。声明数组过大,可能会导致“内存不足”,声明过小可能不够用,链表没有大小的限制,天然地支持动态扩容。这也是它与数组最大的区别。
如果你的代码对内存的使用非常苛刻,那数组就更适合。因为链表中的每个节点都需要消耗额外的存储空间去存储一份指向下一节点的指针。