搜索
首页JavaJava面试题java面试之Arraylist和Linkedlist的区别

java面试之Arraylist和Linkedlist的区别

Dec 24, 2020 am 10:12 AM
arraylistjavalinkedlist面试

java面试之Arraylist和Linkedlist的区别

我们先来介绍下Arraylist的知识:

(学习视频分享:java教学视频

Arraylist:底层是基于动态数组,根据下表随机访问数组元素的效率高,向数组尾部添加元素的效率高;

但是,删除数组中的数据以及向数组中间添加数据效率低,因为需要移动数组。例如最坏的情况是删除第一个数组元素,则需要将第2至第n个数组元素各向前移动一位。而之所以称为动态数组,是因为Arraylist在数组元素超过其容量大,Arraylist可以进行扩容(针对JDK1.8  数组扩容后的容量是扩容前的1.5倍),Arraylist源码中最大的数组容量是Integer.MAX_VALUE-8,对于空出的8位,目前解释是 :

①存储Headerwords;

②避免一些机器内存溢出,减少出错几率,所以少分配;

③最大还是能支持到Integer.MAX_VALUE(当Integer.MAX_VALUE-8依旧无法满足需求时)。

以下是Arraylist部分源码:Arraylist扩容:

d472147ccbbf528d3dd222fc2615aa6.png

(更多面试题分享:java面试题及答案

Arraylist添加数据:(向数组尾部添加)

722b25f123d5c426f368ff6fab0fab2.png

向数组的指定位置添加数组:

1b28927119a452126c7ce10f9de3eca.png

可以看到,只要ArrayList的当前容足够大,add()操作向数组的尾部的效率非常高的,当向数组指定位置添加数据时,会进行大量的数组移动复制操作。而数组复制时,最终将调用System.arraycopy()方法,因此add()操作的效率还是相当高的。尽管这样当向指定位置添加数据时也还是比Linkedlist慢,后者添加数据只需要改变指针指向即可。Arraylist删除数组也需要移动数组,效率较慢。

Linkedlist基于链表的动态数组,数据添加删除效率高,只需要改变指针指向即可,但是访问数据的平均效率低,需要对链表进行遍历。Arraylist get数据的源码:(根据下标访问,效率高)

5365e14c28193f6b7ab472ad85bd047.png

Linkedlist访问数据的源码:(node()函数遍历链表)

3a6cd6115c81bbe4cb9e29b05760501.png

af24df5600d1b7d502cf6a73e88c561.png

总结:

1、对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。 

对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。          

 2、各自效率问题:

9cfa6316bae8626ba65beedbe881e68.png

相关推荐:java入门教程

以上是java面试之Arraylist和Linkedlist的区别的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:csdn。如有侵权,请联系admin@php.cn删除

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能