news 2026/5/9 11:54:43

第二天打卡

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第二天打卡

数组 Array

数组是一种线性表数据结构,它用一组连续的内存空间来存储一组具有相同数据类型的集合。

数组中各个元素的存储是有先后顺序的,它们在内存中按照这个顺序连续存放到一起,内存地址连续。

数组获取元素的时间复杂度为O(1)

一维数组是最常用的数组,其他很多数据结构的变种也都是从一维数组来的。

二维数组及多维数组在开发场景中所用不多,大多在算法及数学计算上。

初始化ArrayList时,如果不指定大小,默认会初始化一个空的元素,这个时候是没有默认长度的,但是当你首次添加元素的时候,就会给初始化的长度,因为所有添加元素操作,都是需要判断容量以及是否扩容的。但随着元素的添加,容量不足时需要扩容操作,这时需要把旧数据迁移到新数组上,数据迁移算是一个比较耗时的操作了。

System.arraycopy

System.arraycopy(elementData,index,elementData,index+1,size - index);
原数组、原数组的起始位置、目标数组、目标数组的起始位置、复制的长度。

ArrayList 的重点离不开对 System.arraycopy 的使用,当添加或者删除操作涉及到数组元素移动或者数组扩容时都会用到System.arraycopy。

就目前我所学到的数据结构中链表和数组都是线性表数据结构,后面需要学习的栈和队列也是线性表数据结构。

数组的元素插入中,头插和中间插入的时间复杂度都为O(n),尾插的时间复杂度需要判断是否需要扩容。数组的元素删除中,头删和中间删除的时间复杂度为O(n),尾删为O(1),而数组的元素获取比较简单,直接从elementData使用索引直接获取即可,时间复杂度为O(1),正因为搜索元素的便捷,才让ArrayList使用那么广泛。

比较特别的是当数组为空,其插入也算添加操作,时间复杂度为O(1)。而当这个空数组没有预分配容量时即ArrayList默认构造函数,则需要先进行扩容即初始化默认数组(如容量10)再进行插入操作,其扩容操作的时间复杂度为O(n),但均摊时间复杂度仍为O(1)。

ArrayList 中默认的初始化长度为10,其扩容的范围为当前容量的一半,至于为何选择1.5倍扩容,1.5倍扩容较2倍和1.25倍而言是时间复杂度和空间利用率之间的最优平衡点,这也是Java ArrayList 选择它的根本原因,而其扩容核心在grow()方法上。

经过这两天的打卡学习,可以思考下,LinkedList和ArrayList的插入效率:
在超大数据量的情况下例如1000w数据量,对于头插,可以发现ArrayList需要做大量的位移和复制操作而LinkedList则只需要实例化一个对象,毫无疑问对于大数据的头插操作来说LinkedList完胜。
接下来我们再对比大数据量情况下的尾插操作,ArrayList并不需要做位移拷贝,自然也就不那么耗时了,而LinkedList则需要创建大量的对象,此时ArrayList尾插效果更好些。
最后让我们再对比下中间插入操作,我们都知道LinkedList在插入前是需要遍历寻找位置的,而ArrayList则通过数组索引直接访问,毫无疑问对于中间插入无论是小数据还是大数据ArrayList都是最优解。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 11:53:47

CANN/HCCL NPU通信端口配置

HCCL_NPU_SOCKET_PORT_RANGE 【免费下载链接】hccl 集合通信库(Huawei Collective Communication Library,简称HCCL)是基于昇腾AI处理器的高性能集合通信库,为计算集群提供高性能、高可靠的通信方案 项目地址: https://gitcode.…

作者头像 李华
网站建设 2026/5/9 11:51:34

Blender MMD Tools终极指南:从零开始掌握MMD模型与动画导入

Blender MMD Tools终极指南:从零开始掌握MMD模型与动画导入 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools …

作者头像 李华
网站建设 2026/5/9 11:41:32

PotPlayer字幕翻译插件深度解析:打破语言壁垒的专业解决方案

PotPlayer字幕翻译插件深度解析:打破语言壁垒的专业解决方案 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 在信息爆炸的时…

作者头像 李华
网站建设 2026/5/9 11:40:36

AutoCAD软件许可浪费严重?合规回收闲置许可,共享给同事

AutoCAD许可浪费严重?教你用新工具搞定这事我去年在XX公司负责那个项目的时候,天天被领导问"为啥许可证买这么多"。你猜怎么着?查了一圈发现我们光是吃灰的AutoCAD许可就有120多个,每月白花的钱够买个小汽车了。这事儿你…

作者头像 李华