arraylist和linkedlist面试题,描述一下ArrayList和LinkedList各自实现和区别
如何解决写爬虫IP受阻的问题?立即使用。
我们先来介绍一下Arraylist的知识:
(学习视频分享:java教学视频)
Arraylist:底层基于动态数组,根据下表随机访问数组元素的效率较高,向数组末尾添加元素的效率较高;
但是,从阵列中删除数据和向阵列中间添加数据效率很低,因为需要移动阵列。例如,在最坏的情况下,如果第一个数组元素被删除,第2到第n个数组元素需要向前移动一位。之所以称之为动态数组,是因为Arraylist在数组元素超过其容量时可以进行扩展(对于JDK1.8数组,扩展后的容量是扩展前的1.5倍)。Arraylist源代码中最大的数组容量是整数。MAX_VALUE-8。对于空出的8位,目前的解释是:
存储Headerwords;
避免部分机器内存溢出,减少出错概率,所以分配少一些;
最大仍能支持整数。MAX_VALUE(整数时。MAX_VALUE-8还是不能满足需求)。
以下是Arraylist的部分源代码:Arraylist扩展:
(分享更多面试问题:java面试问答)
Arraylist添加数据:(添加到数组的末尾)
将数组添加到数组的指定位置:
可以看到,只要ArrayList的当前容量足够大,在数组尾部加上()的效率是很高的。当数据被添加到数组的指定位置时,会执行大量的数组移动和复制操作。但是在复制数组时,最终会调用System.arraycopy()方法,所以add()操作的效率相当高。虽然在向指定位置添加数据时仍然比Linkedlist慢,但后者只需要改变指针就可以添加数据。Arraylist删除数组也需要移动数组,效率很低。
Linkedlist是基于动态数组的链表,具有很高的添加和删除数据的效率。它只需要改变指针,但是访问数据的平均效率较低,所以需要遍历链表。数组列表获取数据的源代码:(按下标访问,效率高)
Linkedlist访问数据源代码:(node()函数遍历链表)
总结:
1.ArrayList对于get和set的随机访问优于LinkedList,因为LinkedList要移动指针。
对于添加和移除操作,LinedList更优越,因为ArrayList移动数据。
2.各自效率的问题:
推荐:java入门。以上是java面试中Arraylist和Linkedlist区别的详细内容。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。