越学越上瘾   11.11 来百知学IT   课程全面升级

立刻报名学习

400-616-5551

您所在位置: 首页> 学习资讯> 面试中关于Java容器ArrayList与LinkedList问题解答

面试中关于Java容器ArrayList与LinkedList问题解答

发布百知教育 来源:学习资讯 2019-08-26

近日,小编总结了常见java面试题和大家分享,我们在面试过程中,针对java容器ArrayListLinkedList的问题是比较多的,那么关于这两方面的问题怎么深入解答呢?

 

我们要先知道ArrayListLinkedList是做什么的,用来实现什么的,其次要知道他们的实现方式有什么不同,要知道严格来说LinkedList才是真正的链表(如果不清楚什么是链表,需要了解一下相关数据结构的知识,这不是一两句话能说清楚的)。下面我们一起看看这两方面深入的回答:

 

ArrayList(数组结构):

优点:getset调用花费常数时间,也就是查询的速度快

缺点:新项的插入和现有项的删除代价昂贵,也就是添加删除的速度慢

LinkedList(链表结构):

优点:新项的插入和和现有项的删除开销很小,即添加和删除的速度快

缺点:对getset的调用花费昂贵,不适合做查询

面试中经常问到一些深入的东西,比如:

是否保证线程安全: ArrayList LinkedList 都是不同步的,也就是不保证线程安全;

底层数据结构: Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向循环链表数据结构;

 

插入和删除是否受元素位置的影响:ArrayList 采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响。 比如:执行add(E e)方法的时候, ArrayList 会默认在将指定的元素追加到此列表的末尾,这种情况时间复杂度就是O(1)。但是如果要在指定位置 i 插入和删除元素的话(add(int index, E element))时间复杂度就为 O(n-i)。因为在进行上述操作的时候集合中第 i 和第 i 个元素之后的(n-i)个元素都要执行向后位/向前移一位的操作。 ② LinkedList 采用链表存储,所以插入,删除元素时间复杂度不受元素位置的影响,都是近似 O1)而数组为近似 On)。

 

是否支持快速随机访问: LinkedList 不支持高效的随机元素访问,而ArrayList 实现了RandmoAccess 接口,所以有随机访问功能。快速随机访问就是通过元素的序号快速获取元素对象(对应于get(int index)方法)

内存空间占用: ArrayList的空间浪费主要体现在在list列表的结尾会预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间(因为要存放直接后继和直接前驱以及数据)。

 ————————————————

版权声明:本文解答部分CSDN博主「SileeLiu」的原创文章

上一篇:零基础自学java要多久 学完能找到工作吗?

下一篇:java培训 | Maven系列:聚合、继承、单继承问题详解!

相关推荐