Java-数组与链表

1. 链表与数组的主要区别

  1. 数组的元素是固定的而链表的结点个数会自动扩展
  2. 数组元素的存储单元是定义时分配的,链表结点存储单元在执行时可动态扩展
  3. 数组中元素的顺序关系由元素在数组的下标决定的,链表结点顺序关系由结点的指针决定的

2. 数组的特点

  1. 在内存中数组是一块连续的区域
  2. 数组需要预留控件,在使用时就必须申请内存,申请过大会造成内存浪费
  3. 插入和删除效率低,插入数据时后面的数据都要向后面移动,因为数组是连续的因此它的读取速度快
  4. 不利于扩展,基本数据类型数组长度不够时只能重新定义然后进行copy(实现了Collection接口除外)

3. 链表的特点

  1. 在内存中任意存放不要求连续
  2. 每一个数据都保存了下一个数据的内存地址,可根据第一个找到第二个以此类推
  3. 增加和删除效率高,比如要增加一个数据到某个位置它只需要知道它前一个位置的原来后一个位置的内存地址就可以了(插入第三个位置,只要知通第二个位置原来第三位置的内存地址就可以了)
  4. 查找效率低,因为必须要知道它前一个元素的位置,所以需要从第一个开始查
  5. 不需要指定大小,可动态扩展,随意插入删除

4. 各自优缺点

数组

优点

  • 随机访问性强,使用简单
  • 查找速度快

缺点

  • 插入删除效率低
  • 手动分配内存可能造成内存浪费
  • 内存要求高,必须是一块连续内存
  • 数组大小固定不能动态扩展

链表

优点

  • 插入删除效率高
  • 动态分配内存
  • 内存利用率高

缺点

不能随机查找,每次都要从第一个开始查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴唐人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值