数组 | 链表 |
---|---|
随机访问速度比较快,增删慢 | 随机访问比较慢,增删比较快 |
(静态)数组从栈中分配空间, 对于程序员方便快速,但是自由度小 | 链表从堆中分配空间, 自由度大 |
数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况 | 链表动态地进行存储分配,可以适应数据动态地增减的情况 |
在内存中必须连续 | 在内存中不需要连续,可以存在任何地方 |
读取O(1) | 读取O(n) |
插入、删除O(n) | 插入、删除O(1) |
链表:
堆:
栈:
堆与栈的区别很明显:
1.栈内存存储的是局部变量而堆内存存储的是实体;
2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;
3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。