APP下载

Java三分钟初中级面试易考题——ArrayList和LinkedList区别

消息来源:baojiabao.com 作者: 发布时间:2026-05-21

报价宝综合消息Java三分钟初中级面试易考题——ArrayList和LinkedList区别

关注我,每天三分钟,轻松掌握一个Java知识点。

1.ArrayList和LinkedList有什么区别?

ArrayList:查询快,增加删除慢。

LinkedList:查询慢,增加删除快。

2.是什么造成了两者之间的差别?

如图所示,ArrayList实现了List界面,它本质上上是一个数组,只不过它能通过插入的资料,动态调整自己的大小,我们来看一下它的源代码:

我们发现,如果插入资料超出了原有定义的阵列长度,ArrayList会建立一个新的阵列,是原来阵列的1.5倍,然后通过copyOf方法,把原有的数组里的资料搬迁过来,这也是导致ArrayList增删变慢的原因之一。

再一个原因是,ArrayList在内存中是一整条的,这也是它能快速查询的愿意,但如果你删除这整条中间某个元素,为了保证完整性,该元素的所有后续元素,位置都会前移,这个开销还是很大的。

我们再来看看linkedList,它的结构如图:

它的本质是双向连结串列,何为双向连结串列呢,就是一个节点上有它的前面一个元素和后面一个元素的位置资讯,这样我们如果知道一个节点,那访问它的前后节点都特别方便。

大家可以看到,如果我们想删除一个元素,只需把前一个元素的尾部资讯和后一个元素的首部资讯修改一下就好了,其他元素并不需要移动。这就是连结串列插入和删除效率高的原因。

连结串列不支援快速随机访问,你要想看某一个元素,那你就需要从头遍历连结串列,所以它的查询速度非常慢。

可能有人要反驳说,LinkedList里面有get(n)方法,说明连结串列可以访问指定位置的值啊。

其实这个方法本质是看你传入的索引位置和连结串列size()/2位置比较,如果比较大的话,就从尾部开始检索,优化的地方有限。

综上所述,如果你的列表元素非常少的话,使用ArrayList完全没问题的,特别是想要对集合进行频繁检索的,更应避免使用LinkedList。

3.连结串列中都有哪些特有的方法

void addFirst(E element)//将某个元素新增到连结串列首部void addLast(E element)//将某个元素新增到连结串列尾部E getFirst()//获取首元素E getLast()//获取尾元素E removeFirst()//移除首元素E removeLast()//移除尾元素LinkedList(Collection extends E> element)//构建一个连结串列,将集合中所有元素新增到连结串列中以上就是今天的知识点,各位小伙伴get到吗?创作不易,望各位多多点赞收藏,有什么建议可以留言告诉我,我会积极采纳!

2019-12-25 00:49:00

相关文章