【Java面试】ArrayList和LinkedList的区别

本文探讨了Java中ArrayList和LinkedList的区别,包括查询、插入、删除的效率以及内存占用。ArrayList适合随机访问,插入和删除操作较慢;LinkedList查询效率低,但插入和删除在特定情况下更快。两者都不具备线程安全性,需要同步处理。
摘要由CSDN通过智能技术生成

ArrayList和LinkedList简介
ArrayList底层是一个Object类型的数组,初始容量是10,支持动态扩容,扩容后的容量是当前容量的1.5倍,它的最大容量是 Integer.MAX_VALUE - 8(但是仍可以扩容到Integer.MAX_VALUE),对于空出的8位,目前的解释是避免一些机器内存溢出,减少出错几率。

LinkedList底层是一个双向链表,初始容量是0,扩容只需新建节点进行指针指向即可。

区别
查询
ArrayList随机访问效率很高,因为元素的存储是有序的,通过下标index可以知道所查询数据在内存中的位置,寻址快,时间复杂度O(1)。

LinkedList查询效率较低,它在查询指定数据的时候需要遍历链表逐个查询,时间复杂度O(n)。

插入
ArrayList在尾部插入的效率比较高,时间复杂度O(1),但是在其他位置插入效率则比较低,需要进行大量的数据移动,时间复杂度O(n)。

LinkedList在头部和尾部插入元素的效率比较高,时间复杂度为O(1),但是在中间指定位置插入元素,需要先遍历找到元素的位置,然后插入,时间复杂度O(n)。

删除
ArrayList移除元素除了末尾节点之外都伴

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值