计算机学习笔记 数组核心操作与ArrayList原理
7月22日-23日课程复习笔记数组核心操作与ArrayList原理本次课程深入探讨了数组这一基础数据结构的增删改查操作重点剖析了二分查找算法的实现细节与边界陷阱。同时课程还讲解了在有序数组中进行插入和删除的特殊逻辑并揭示了Java原生数组的局限性以及ArrayList通过动态扩容实现“可变”的底层原理。第一部分数组的增删改查核心操作1. 数组的基本特性连续存储数组在内存中占据一块连续的地址空间每个元素通过下标直接访问。随机访问由于连续存储的特性通过下标访问元素的时间复杂度为O(1)效率极高。固定长度Java中的原生数组一旦创建其长度length就不可改变。2. 插入操作 (Add)核心思路在指定位置插入新元素需要将该位置及其之后的所有元素向后移动一位腾出空间后再进行赋值。移动顺序必须从后往前依次移动元素。如果从前往后移动会导致后续元素被覆盖而丢失。时间复杂度平均需要移动一半的元素时间复杂度为O(n)。因此数组不适合频繁插入的场景。边界检查插入位置必须在有效范围内即0到size包含size表示在末尾追加。3. 删除操作 (Delete)核心思路删除指定位置的元素需要将该位置之后的所有元素向前移动一位覆盖掉目标元素。移动顺序从前往后依次覆盖即可。逻辑删除数组的删除是逻辑上的通过将后续元素前移覆盖并将有效数据长度size减1来实现。末尾被覆盖的位置成为无效数据无需特殊处理。删除所有匹配项当需要删除数组中所有值为x的元素时必须从后往前遍历。如果从前往后遍历删除一个元素后后续元素前移可能会导致连续的相同元素被跳过检查造成漏删。删除首个匹配项当只需要删除第一个匹配的元素时应从前往后遍历找到后立即删除并结束循环效率更高。4. 查找操作 (Search)线性查找适用于无序数组。通过遍历数组逐个比较时间复杂度为O(n)。二分查找仅适用于有序数组。通过不断将查找范围缩小一半来快速定位目标值时间复杂度为O(log n)。第二部分二分查找算法详解1. 核心思想分治法每次比较目标值与查找范围的中间值mid根据比较结果舍弃一半的数据将搜索范围缩小到另一半。2. 两种实现方式与边界陷阱二分查找的实现关键在于循环条件和边界更新主要有两种写法必须配套使用否则会导致死循环或漏查。写法一左闭右闭区间[left, right]循环条件while (left right)。当left等于right时区间内仍有一个元素需要检查。边界更新目标值大于mid值left mid 1。目标值小于mid值right mid - 1。关键点必须使用mid ± 1来更新边界确保搜索范围真正缩小避免left和right卡住导致死循环。写法二左闭右开区间[left, right)循环条件while (left right)。当left等于right时区间为空循环结束。初始值right应初始化为array.length因为右边界是开区间不包含该位置。边界更新目标值大于mid值left mid 1。目标值小于mid值right mid。因为right是开区间mid位置的值已经比较过且不符合新的搜索范围应排除mid。第三部分有序数组的特殊操作1. 有序数组插入核心思路在保持数组有序的前提下插入新元素。实现步骤定位遍历数组找到第一个大于目标值的位置该位置即为插入点。扩容检查检查数组是否已满size array.length如果已满则需要先扩容。移动从插入点开始将所有后续元素向后移动一位。插入将新元素放入腾出的空位并将size加1。边界情况插入最大值如果新元素比数组中所有元素都大则直接插入到数组末尾size位置。空数组如果数组为空size 0直接插入即可。2. 有序数组删除删除逻辑与普通数组相同但删除后仍需保持数组的有序性。删除操作本身不会破坏有序性。第四部分Java原生数组的局限性与ArrayList1. 原生数组的局限性长度固定创建后无法改变长度难以应对数据量不确定的场景。开小了会溢出开大了会浪费空间。2. ArrayList的实现原理封装ArrayList底层封装了一个原生数组并提供了一套动态增删改查的方法。动态扩容机制初始容量ArrayList在创建时会分配一个初始容量通常为10。容量检查每次添加元素时都会检查当前有效数据量size是否等于数组长度。创建新数组如果数组已满会创建一个新的、更大的数组。新数组的长度通常是原数组长度的1.5倍。数据复制将原数组中的所有数据逐个复制到新数组中。引用更新将ArrayList内部的数组引用指向这个新数组。原数组因没有引用指向会被垃圾回收器回收。本质所谓的“动态扩容”并非修改了原数组而是通过“创建新数组 - 复制数据 - 更新引用”的方式实现了“可变”的视觉效果。有效数据管理ArrayList使用一个size变量来记录当前存储的有效元素个数。这个size变量有两个作用记录当前元素数量。指向下一个新元素的插入位置因为数组下标从0开始。在打印或遍历时只处理0到size-1范围内的有效数据避免打印出数组中无效的默认值如0。package com.array.demo; import java.util.ArrayList; public class ChangeArray { static ArrayListString list new ArrayListString(); static ArrayListInteger list2 new ArrayListInteger(); public static void main(String[] args) { list.add(114514); list.add(1145141919810); list.add(2, element); list.remove(1); list.set(0, 1919801); // 1. 根据索引查找元素 String element list.get(0); // 获取索引0的元素 // 2. 根据元素查找索引第一次出现的位置 int index list.indexOf(1919801); // 返回该元素首次出现的索引 // 3. 根据元素查找索引最后一次出现的位置 int lastIndex list.lastIndexOf(element); // 返回该元素最后出现的索引 // 4. 判断是否包含某个元素 boolean contains list.contains(1919801); // 返回 true/false System.out.println(list); System.out.println(index); } }

相关新闻

Java+协同过滤+数据可视化公路车销售管理系统

Java+协同过滤+数据可视化公路车销售管理系统

公路车销售管理系统的选题背景随着健康生活理念的普及和骑行文化的兴起,公路自行车作为兼具运动性能和通勤功能的交通工具,市场需求逐年增长。传统公路车销售多依赖线下门店或简单电商平台,缺乏基于用户偏好的个性化推荐能力,导致…

2026/7/23 11:24:28 阅读更多 →
脑机接口系统百万级信号压力测试与优化实践

脑机接口系统百万级信号压力测试与优化实践

1. 项目背景与核心挑战脑机接口(BCI)系统的压力测试是确保其可靠性的关键环节。当系统需要处理每秒百万级神经信号输入时,硬件解码芯片、信号处理算法和软件架构都会面临极限挑战。我们团队最近完成了一次针对商用BCI设备的全链路压力测试&am…

2026/7/23 11:24:28 阅读更多 →
AI智能体的上下文窗口不够用?拆任务比扩窗口更靠谱

AI智能体的上下文窗口不够用?拆任务比扩窗口更靠谱

问: 智能体处理复杂任务时,对话稍长就开始“忘记”前面的内容,或者生成的内容越来越零散。加大上下文窗口能解决问题吗?答: 不能。把窗口从128K扩到1M,只是把“显性遗忘”变成了“隐性遗忘”——模型依然会…

2026/7/23 11:23:28 阅读更多 →

最新新闻

FActBench:LLM生成文本细粒度评估基准解析

FActBench:LLM生成文本细粒度评估基准解析

1. 项目概述:FActBench基准测试的定位与价值 在大型语言模型(LLM)爆发式发展的当下,如何客观评估生成文本的细粒度质量成为学界和工业界共同面临的挑战。FActBench作为专为LLM生成文本设计的细粒度自动评估基准,其核心…

2026/7/23 11:47:37 阅读更多 →
硬件开发中评估模块的正确使用:从核心定位到安全合规实践

硬件开发中评估模块的正确使用:从核心定位到安全合规实践

1. 评估模块:工程师的“探路石”与“安全手册”在硬件开发的早期阶段,面对一颗全新的芯片,最让工程师头疼的问题莫过于:“这颗芯片的数据手册写得天花乱坠,但实际性能到底如何?我的电路设计思路是否可行&am…

2026/7/23 11:47:37 阅读更多 →
TM4C129 EPI时序与CRC配置实战:提升外部存储访问稳定性与数据完整性

TM4C129 EPI时序与CRC配置实战:提升外部存储访问稳定性与数据完整性

1. 项目概述与核心价值 在嵌入式系统开发,尤其是涉及高速数据采集、图形显示或大容量数据缓存的场景中,微控制器(MCU)片内存储资源往往捉襟见肘。这时,外部并行接口(EPI)就成了连接外部SRAM、PS…

2026/7/23 11:47:37 阅读更多 →
下一代地热能技术:EGS与超临界系统的突破与应用

下一代地热能技术:EGS与超临界系统的突破与应用

1. 下一代地热能技术概述地热能作为可再生能源的重要分支,正在经历从传统 hydrothermal 系统向增强型地热系统(EGS)和超临界地热系统的技术跃迁。与传统地热相比,下一代地热技术最显著的特征是突破了"天然热储天然流体天然渗透率"的三重限制&a…

2026/7/23 11:47:37 阅读更多 →
VRChat本地CDN部署与性能优化实战

VRChat本地CDN部署与性能优化实战

1. 为什么VRChat玩家需要本地CDN?在VRChat这类社交VR平台上,用户生成内容(UGC)的实时加载速度直接影响体验。当你在猫娘角色里蹦迪时,突然遇到模型加载卡顿或者贴图模糊,这种体验就像跳舞时踩到香蕉皮——既…

2026/7/23 11:47:37 阅读更多 →
基于SDF光线步进的实时软阴影与环境光遮蔽实现

基于SDF光线步进的实时软阴影与环境光遮蔽实现

1. 项目概述:从硬到软的视觉革命 如果你玩过一些早期的3D游戏,或者尝试过用传统的光栅化管线(比如OpenGL或DirectX的固定管线)自己写过一个简单的场景,你大概率会对那种“一刀切”的阴影印象深刻——边缘锐利得像用尺子…

2026/7/23 11:46:36 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻