浅谈ArrayList和LinkedList的区别

一、总体概括

1、基础知识

  • 数组:
    在这里插入图片描述

  • 链表:

    • 单向链表
      在这里插入图片描述
    • 双向链表
      在这里插入图片描述

数组与链表的优缺点:

  • 数组
    • 优点
      1、随机访问性强
      2、查找速度快
    • 缺点
      1、插入和删除效率低,必须移动数组
      2、可能浪费内存
      3、内存空间要求高,必须有足够的连续内存空间。
      4、数组大小固定,不能动态拓展
  • 链表
    • 优点
      1、插入删除速度快,只需通过指针指向对象地址
      2、内存利用率高,不会浪费内存
      3、大小没有固定,拓展很灵活
    • 缺点
      不能随机查找,必须从第一个开始遍历,查找效率低

2、集合框架

在这里插入图片描述

3、ArrayListLinkedList在JDK中的位置

在这里插入图片描述

4、具体描述

  • ArrayList

ArrayList是以 数组 的方式来实现List接口d的,数组的特性是可以使用索引的方式来快速定位对象的位置,因此对于快速的随机取得对象的需求,使用ArrayList实现执行效率上会比较好。

ArrayList是顺序结构,所以定位很快,但插入,删除数据慢。

  • LinkedList

LinkedList是采用 双向链表 的方式来实现List接口的,它本身有自己特定的方法. 由于是采用链表实现的,因此在进行insert和remove动作时在效率上要比ArrayList要好得多。

LinkedList 是链表结构,定位慢,但插入,删除数据快。

二、相同点

ArrayListLinkedList都实现了List接口,实现了相同方法:

  • add()方法:add 有两种用法:
    • 第一种是直接add对象,把对象加在最后面。
    • 第二种是在指定位置加对象。
  • contains() 方法:判断一个对象是否在容器中。
    • 判断标准: 是否是同一个对象。
  • get()方法: 获取指定位置的对象,但要注意下标越界问题。
  • indexOf()方法:用于判断一个对象在ArrayList中所处的位置。
  • remove()方法 :用于把对象从ArrayList中删除。
  • remove方法:可以根据下标删除ArrayList的元素,也可以根据对象删除。
  • set()方法: 用于修改指定位置的元素。
  • size()方法:用于获取ArrayList的大小。
  • toArray()方法:可以把一个ArrayList对象转换为数组。
  • addAll()方法: 把另一个容器所有对象都加进来。
  • clear()方法: 清空一个ArrayList。

三、不同点

实现的接口不同

  • LinkedList除了实现了List接口外,LinkedList还实现了双向链表结构Deque,可以很方便的在头尾插入删除数据。
  • LinkedList 除了实现了ListDeque外,还实现了Queue接口(队列)。Queue是先进先出队列 FIFO,常用方法:offer() 在最后添加元素,poll() 取出第一个元素,peek() 查看第一个元素。

数据存储不同

  • ArrayList是顺序结构,底层使用数组形式对数据进行存储。
  • LinkedList是链表结构,底层使用双向链表形式对数据进行存储 。

功能效率不同

  • ArrayList
    查询修改快: 数组可以直接通过索引获取对应位置数据。
    添加删除慢: 在对首位或中间数据进行添加与删除操作时,需要将之后的数据向后或向前移动,随着数据的增大移动的次数也会增大,导致执行的效率降低。
  • LinkedList
    查询修改慢: 底层使用双向链表形式对数据进行存储,每一块只保存当前数据以及前后块地址,在进行查找时,如果查找的是非首末位块,需要依次向后查找。
    添加删除快: 链表每块保存数据添加与删除时只影响前后块位置的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

璃尔 °

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

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

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

打赏作者

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

抵扣说明:

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

余额充值