数组:
- 静态分布内存
- 根据下标定位元素
- 查找的时间复杂度为O(1),插入或删除的时间复杂度为O(N)
- 初始化数组需要规定数组大小,不能扩展
数组优点:
- 查找速度相较于链表更快
- 随机访问性更强,无序遍历,直接访问table[i]可快速定位
数组缺点:
- 删除或插入的速度更慢
- 由于数组大小是初始化时规定的,可能不能充分利用完全,容易造成内存浪费
- 需要连续的内存空间,且剩余内存必须足够大。对内存要求较高
链表:
- 动态分布内存
- 通过指针定位下位元素,单链表为next()方法,双链表除了next()方法外还有pre()方法定位上一位元素
- 插入或删除的时间复杂度为O(1),查找的时间复杂度为O(N)
- 链表的长度是动态扩展的
链表的优点:
- 插入的速度相较于数组更快
- 由于链表长度动态扩展,所以能充分利用内存,不会存在内存浪费
链表的缺点
- 查找的速度更慢一些
- 不支持随机访问
单链表常见于双链表的原因
双链表由于相较于单链表每个元素多了一个向前的指针,所以占用的存储空间更大,一个指针占用的内存空间在64位系统是8个字节,n个字节就需要多8*N个内存消耗。内存浪费严重