1. 链表与数组的主要区别
- 数组的元素是固定的而链表的结点个数会自动扩展
- 数组元素的存储单元是定义时分配的,链表结点存储单元在执行时可动态扩展
- 数组中元素的顺序关系由元素在数组的下标决定的,链表结点顺序关系由结点的指针决定的
2. 数组的特点
- 在内存中数组是一块连续的区域
- 数组需要预留控件,在使用时就必须申请内存,申请过大会造成内存浪费
- 插入和删除效率低,插入数据时后面的数据都要向后面移动,因为数组是连续的因此它的读取速度快
- 不利于扩展,基本数据类型数组长度不够时只能重新定义然后进行copy(实现了Collection接口除外)
3. 链表的特点
- 在内存中任意存放不要求连续
- 每一个数据都保存了下一个数据的内存地址,可根据第一个找到第二个以此类推
- 增加和删除效率高,比如要增加一个数据到某个位置它只需要知道它前一个位置的原来后一个位置的内存地址就可以了(插入第三个位置,只要知通第二个位置原来第三位置的内存地址就可以了)
- 查找效率低,因为必须要知道它前一个元素的位置,所以需要从第一个开始查
- 不需要指定大小,可动态扩展,随意插入删除
4. 各自优缺点
数组
优点
- 随机访问性强,使用简单
- 查找速度快
缺点
- 插入删除效率低
- 手动分配内存可能造成内存浪费
- 内存要求高,必须是一块连续内存
- 数组大小固定不能动态扩展
链表
优点
- 插入删除效率高
- 动态分配内存
- 内存利用率高
缺点
不能随机查找,每次都要从第一个开始查找