面试题:ArrayList与LinkedList?

面试题:ArrayList与LinkedList?

  • 第一点:接口实现上:

ArrayList:实现了List接口,而List继承自Collection接口
LinkedList:与ArrayList同样实现了List接口,但是它实现了Deque接口,因此,也就是说:LinkedList支持双端队列的相关逻辑处理。

  • 第二点:底层原理实现:

ArrayList:基于数组 LinkedList:基于双端链表队列

  • 第三点:数据检索效率:

ArrayList:基于数组,因此在初始化或者加载时就会将元素对应的下标等信息存储在内存中。可以直接下标直接检索获取对应的数据元素。
LinkedList:基于双端链表队列,每个元素都依靠自己在内存中的指针地址,并且他们还要记录与他们相邻的前后元素的指针信息,这种情况下检索信息就需要遍历队列中的元素。查询效率就弱于ArrayList。
但是,LinkedList每次都会存放和记录授为元素的位置,所以如果是获取指定首元素或者尾元素时
LinkedList可直接获取对应的元素信息,此场景时检索效率要优于ArrayList的。(ArrayList需要计算大小,然后遍历获取)

  • 第四点:数据修改效率:

ArrayList:基于数组,假设修改非首尾元素,则修改完当前元素时,当前元素以后元素的位置都将发生变化,向后移动。
LinkedList:基于双端链表队列,每个元素只关注与自己相临的元素的信息,因此它的修改要优于ArrayList

  • 第五点:扩容机制:

ArrayList:默认初始值为10,每次扩容为当前的1.5倍。(源码如下)

    private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

LinkedList实现基于双端链表队列,没有初始大小,也没有扩容机制。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值