面试题收录-关于ArrayList和LinkedList的区别

在说到面试题之前,我们先得简单说一下这两种集合有什么特点

 

 

1 ArrayList的特点

ArrayList:基于数组实现

具有查询快增删慢等特点 

其中它的运行逻辑如下图所示,很重要,待会要用。当数组需要扩容时,因为无法直接添加数据,实际上是创建一个新的数组,把原数组内的数据全部复制去新数组里面。

 

2 LinkedList的特点

LinkedLis1t是基于链表结构实现的。链表由一个一个的节点组成,将数据首尾相连,这就造成了特点:查询慢增删快(正好跟ArrayList反过来)

 当我们需要增删数据时,只需要拆开链表的两端,把数据塞进去,再连回来即可,很方便快捷。

 

 单向链表就是首尾相连,双向链表就是反过来再连一遍,这就导致了效率是单向链表的两倍!

虽然依然很慢

3 面试题

我们先拟定一种情况,有很大的数据需要添加,且我们可以在队尾添加,此时是查询快增删慢的ArrayList更快还是查询慢增删快的LinkedList更快呢?

首先我们先想想ArrayList的特点,它在扩容时会增加1.5倍的容量。这时候,当我们添加很大量的数据时,它也会扩容很大的容量,此时我们从队尾添加数据的时候,它不需要再进行耗时耗力的扩容。所以是ArrayList更快!

第二种情况有很大的数据需要添加,且我们只能在队首添加。

此时,ArrayList虽然扩容了很大的容量,但因为是在队首添加,所以每添加一次就要把所有数据都往后挪一位,自然需要大量的操作。所以这时候时LinkedList更快!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值