首页 > 其他分享 >ArrayList和LinkedList底层原理的区别和使用场景

ArrayList和LinkedList底层原理的区别和使用场景

时间:2024-03-14 10:04:27浏览次数:15  
标签:扩容 LinkedList ArrayList 数组 复杂度 底层

(1)ArrayList底层是动态数组,查询快、增删慢。存储空间是连续的,可以根据寻址方式直接找到对应的元素位置,所以查询时间复杂度是o(1)。

  • 扩容:ArrayList支持动态扩容,在每次新增元素的时候会判断容量是否溢出,如果溢出则会进行扩容操作。当size=elementData.length时,表示数据数量已经超过了数组容量,需要扩容,扩容后的数组长度为原来数组长度的1.5倍。
  • 复制:当扩容操作结束后,如果新增的元素不在数组尾部,则将索引后面的元素通过System.arraycopy往后移动一位。
  • 赋值:将值赋给数组中对应的索引,并将size++。
  add()时间复杂度是o(1)或者o(n),remove()的时间复杂度是o(n),get()、set()的时间复杂度是o(1)。
(2)LinkedList底层是一个双向链表,查询慢、增删快。存储空间不连续,节点之间是通过指针进行关联的,在查询过程中需要不断跳转新的地址,没有初始化大小,也没有扩容机制。
  add()、remove()的时间复杂度是o(1),get()、set()的时间复杂度是o(n)。
参考文献:https://blog.csdn.net/xingyu19911016/article/details/125049128

标签:扩容,LinkedList,ArrayList,数组,复杂度,底层
From: https://www.cnblogs.com/wbbky/p/18072153

相关文章

  • JVM原理(GC,内存),JAVA底层
    1.JVM内存模型线程独占:栈,本地方法栈,程序计数器线程共享:堆,方法区2.什么是栈又称方法栈,线程私有的,线程执行方法是都会创建一个栈阵,用来存储局部变量表,操作栈,动态链接,方法出口等信息.调用方法时执行入栈,方法返回式执行出栈.3.什么是本地方法栈与栈类似,......
  • ThreadLocal底层原理
    ThreadLocal是Java中的一个线程局部变量工具类,它允许每个线程都有自己独立的变量副本,而不会相互干扰。ThreadLocal的底层原理涉及到ThreadLocalMap和Thread类。在ThreadLocal内部,使用一个ThreadLocalMap对象来存储每个线程对应的变量值。当调用set()方法设置......
  • 深入理解 ELK 中 Logstash 的底层原理 + 填坑指南
    深入理解ELK中Logstash的底层原理+填坑指南<imgsrc="https://pic4.zhimg.com/v2-3afecd9bcad8087524ef7db1f8f51abf_b.jpg"data-rawwidth="722"data-caption=""data-size="normal"data-rawheight="500"class="origi......
  • Java ArrayList 与 LinkedList 的灵活选择
    JavaArrayListJavaArrayList类是一个可变大小的数组,位于java.util包中。创建ArrayListimportjava.util.ArrayList;ArrayList<String>cars=newArrayList<String>();//创建一个ArrayList对象添加元素cars.add("Volvo");cars.add("BMW");cars.add(......
  • 笔记(七):事务底层与高可用原理
    日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。尤为重要的是二进制日志(binlog)和事务日志(包括redolog和undolog)。MySQL在事务实现机制上采用的是WAL(Wri......
  • MySQL(四):InnoDB引擎底层解析
    官方文档地址:https://dev.mysql.com/doc/refman/8.3/en/innodb-storage-engine.html。InnoDB存储引擎有三大特性:双写机制、BufferPool、自适应Hash。InnoDB存储引擎架构的内存和磁盘结构如下:上述架构图描述了数据在内存和磁盘上的流转和存储流程,在实际开发......
  • SSK:超级键盘模拟器,调用底层,可模拟所有按键
    SSK-吵架键盘模拟器SuperSimulatorofKeyboard调用系统底层,能够模拟所有键盘操作!本程序结合快Key(QuicKeys智能登录助手)一起使用,能够创造更多奇迹!【下载】点击下载 SSK:超级键盘模拟器:https://files.cnblogs.com/files/BigSystemsView/SSK-%E8%B6%85%E7%BA%A7%E9%94%A......
  • 2.ArrayList
    集合是什么,有什么特点?一种容器,用来存储数据集合的大小可变ArrayList是什么?怎么使用?是集合中最常用的一种,ArrayList是泛型类,可以约束存储的数据类型创建对象,调用无参数构造器初始化对象:publicArrayList();调用相应的增删改查数据的方法ArrayList提供了哪些常用的方法......
  • Hbase的底层操作原理
    1、HBase读流程 1)Client先访问zookeeper,从meta表读取region的位置,然后读取meta表中的数据。meta中又存储了用户表的region信息;2)根据namespace、表名和rowkey在meta表中找到对应的region信息;3)找到这个region对应的regionserver;4)查找对应的region;5)先从MemStore找数据,如果没有,再......
  • LinkedList
    底层数据结构是双链表,查询慢,增删快,但是如果操作的是首尾元素,速度也很快。Node内部类,双向节点结构//双向链表的内部节点privatestaticclassNode<E>{Eitem;//现在索要存储的数据Node<E>next;//下一个节点的地址Node<E>prev;......