arraylist和linkedlist面试题,描述一下ArrayList和LinkedList各自实现和区别

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: