java学习--ArrayList

一、什么是 ArrayList

ArrayListjava.util包下的类,实现了List接口,本质是动态扩容的数组(相比普通数组,它的长度可以自动调整)。

  • 底层基于数组实现,支持快速随机访问(通过索引取值,时间复杂度 O (1))。
  • 增删元素(尤其是中间位置)效率较低(需要移动元素,时间复杂度 O (n))。
  • 允许存储null值,且元素可重复,有序(按添加顺序保存)。

二、核心用法(完整示例代码)

以下是ArrayList最常用的操作,代码可直接复制运行:

import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ArrayListDemo { public static void main(String[] args) { // 1. 创建 ArrayList 对象(指定泛型,推荐,避免类型转换问题) List<String> list = new ArrayList<>(); // 2. 添加元素 list.add("Java"); // 末尾添加 list.add("Python"); list.add(1, "C++"); // 指定索引(1)添加,原索引1及之后的元素后移 System.out.println("添加后:" + list); // 输出:[Java, C++, Python] // 3. 获取元素 String first = list.get(0); // 通过索引获取,索引从0开始 System.out.println("第一个元素:" + first); // 输出:Java // 4. 修改元素 list.set(2, "Go"); // 替换索引2的元素 System.out.println("修改后:" + list); // 输出:[Java, C++, Go] // 5. 删除元素 list.remove(1); // 按索引删除 list.remove("Go"); // 按元素值删除 System.out.println("删除后:" + list); // 输出:[Java] // 6. 遍历元素(三种常用方式) // 方式1:for循环(按索引) System.out.println("for循环遍历:"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } // 方式2:增强for循环 System.out.println("增强for循环遍历:"); for (String s : list) { System.out.println(s); } // 方式3:迭代器 System.out.println("迭代器遍历:"); Iterator<String> it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } // 7. 其他常用方法 int size = list.size(); // 获取元素个数 boolean isEmpty = list.isEmpty(); // 判断是否为空 boolean contains = list.contains("Java"); // 判断是否包含某个元素 list.clear(); // 清空所有元素 } }

三、关键特性解析

  1. 扩容机制

    • 初始容量默认是 10(JDK8 及以上),当元素个数超过当前容量时,会自动扩容为原来的1.5 倍(计算方式:newCapacity = oldCapacity + (oldCapacity >> 1))。
    • 如果提前知道元素数量,可通过new ArrayList<>(指定容量)初始化,减少扩容次数,提升性能。
  2. 线程安全

    • ArrayList非线程安全的,如果多线程同时读写ArrayList,可能会导致数据错乱。
    • 线程安全场景可使用:Vector(古老的线程安全版,效率低)、Collections.synchronizedList(new ArrayList<>())CopyOnWriteArrayList(高并发读场景推荐)。
  3. 与普通数组的区别

    特性ArrayList普通数组
    长度动态扩容固定长度
    方法支持丰富(add/remove 等)仅通过索引操作
    存储类型只能存对象(基本类型自动装箱)可存基本类型 / 对象

四、常见面试 / 使用注意点

  • 遍历删除元素:不能在增强 for 循环中直接删除元素(会抛ConcurrentModificationException),需用迭代器的it.remove()方法。示例:
    List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); Iterator<String> it = list.iterator(); while (it.hasNext()) { String s = it.next(); if (s.equals("a")) { it.remove(); // 正确删除方式 } }
  • 空指针风险list.get(index)时,若索引越界(如 index >= list.size ()),会抛IndexOutOfBoundsException,使用前需校验索引合法性。

总结

  1. ArrayList是基于动态数组的 List 实现,支持快速随机访问,增删中间元素效率低,有序、可重复、允许 null。
  2. 核心操作包括添加(add)、获取(get)、修改(set)、删除(remove)、遍历,推荐指定泛型避免类型转换问题。
  3. 非线程安全,扩容默认 1.5 倍,遍历删除需用迭代器,提前指定容量可优化性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1155779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

借助AI技术高效撰写学术论文,这7个专业网站支持格式规范与LaTeX排版适配功能

工具快速对比排名&#xff08;前7推荐&#xff09; 工具名称 核心功能亮点 处理时间 适配平台 aibiye 学生/编辑双模式降AIGC 1分钟 知网、万方等 aicheck AI痕迹精准弱化查重一体 ~20分钟 知网、格子达、维普 askpaper AIGC率个位数优化 ~20分钟 高校检测规则通…

LLDB:现代化的开源调试器(LLVM Debugger)

LLDB&#xff1a;LLVM Debugger 现代化的开源调试器 LLDB是一个现代化的开源调试器&#xff0c;作为LLVM编译器项目的一部分&#xff0c;它被设计为高性能、可扩展&#xff0c;并且支持多种语言和平台。以下是对LLDB的详细解析&#xff1a; 1. 核心背景 所属项目&#xff1a;L…

51单片机——GPIO、按键、中断、定时器与PWM

目录 一、GPIO 1.1 核心概念 1.2 工作模式分类 1.2.1 输出模式&#xff1a;控制外设 1.2.2 输入模式&#xff1a;检测外设信号 二、独立按键 2.1 硬件连接原理 2.2 核心工作逻辑 2.3 消抖处理 三、中断系统 3.1 中断核心概念 3.2 中断源分类与关键参数 3.3 中断处…

OBS教程:如何打开OBS美颜,美妆,美发,美型功能?如何使用美颜插件优惠券兑换券

主播只需简单的化妆甚至不化妆&#xff0c;也不用去做头发&#xff0c;一切效果都可以通过OBS美颜插件实现美颜、美妆、口红、美瞳、眼影、腮红、高光、、美发、美型、美体、特效、口罩、遮罩等功能&#xff0c; 在教程开始之前&#xff0c;先给大家看看效果。 一、美妆效果&…

Pulsar 特性在 AI 场景中的使用!

引言 没有意外&#xff0c;随着模型规模的持续增长和应用场景的日益复杂&#xff0c;AI Infra 也自然地从"单体架构" -> "分布式架构"进行演进&#xff0c;例如&#xff1a; 在大模型训练和推理阶段&#xff0c;随着模型规模的增长&#xff0c;需要通…

运用AI提升论文撰写生产力,7个推荐资源涵盖格式标准化和LaTeX排版功能

工具快速对比排名&#xff08;前7推荐&#xff09; 工具名称 核心功能亮点 处理时间 适配平台 aibiye 学生/编辑双模式降AIGC 1分钟 知网、万方等 aicheck AI痕迹精准弱化查重一体 ~20分钟 知网、格子达、维普 askpaper AIGC率个位数优化 ~20分钟 高校检测规则通…

电商行业的数据分析工具推荐

电商行业的数据分析工具推荐 关键词:电商行业、数据分析工具、数据挖掘、可视化、数据洞察 摘要:本文聚焦于电商行业,深入探讨了适用于该领域的各类数据分析工具。从工具的背景介绍出发,阐述其目的、适用读者和文档结构,详细解释相关术语。接着介绍核心概念与联系,通过文…

利用人工智能自动化论文生成,7个实用网站包含学术格式规范与LaTeX解决方案

工具快速对比排名&#xff08;前7推荐&#xff09; 工具名称 核心功能亮点 处理时间 适配平台 aibiye 学生/编辑双模式降AIGC 1分钟 知网、万方等 aicheck AI痕迹精准弱化查重一体 ~20分钟 知网、格子达、维普 askpaper AIGC率个位数优化 ~20分钟 高校检测规则通…

通过AI技术快速产出合规论文,7个工具网站提供LaTeX适配及格式校对服务

工具快速对比排名&#xff08;前7推荐&#xff09; 工具名称 核心功能亮点 处理时间 适配平台 aibiye 学生/编辑双模式降AIGC 1分钟 知网、万方等 aicheck AI痕迹精准弱化查重一体 ~20分钟 知网、格子达、维普 askpaper AIGC率个位数优化 ~20分钟 高校检测规则通…

什么是RPKI

文章目录为什么需要RPKIRPKI是如何工作的RPKI功能扩展RPKI&#xff08;Resource Public Key Infrastructure&#xff0c;资源公钥基础设施&#xff09;是一种基于PKI&#xff08;Public Key Infrastructure&#xff0c;公钥基础设施&#xff09;的技术&#xff0c;专门用于验证…

什么是RR

文章目录为什么使用RRRR的工作原理RR的使用场景在大规模的BGP网络中加入RR&#xff08;Route Reflector&#xff09;&#xff0c;是用来解决IBGP全连接网络的一种方案。 RR&#xff08;Route Reflector&#xff09;作为一种特殊的IBGP路由器&#xff0c;可以作为全网路由条目存…

什么是热插拔

文章目录 什么场景下需要进行热插拔如何进行热插拔 热插拔又称为带电插拔或热替换&#xff0c;是指在不切断设备电源的情况下&#xff0c;将主控板、接口板、光模块等部件插入或拔出设备。执行热插拔操作前需要详细阅读部件说明文档&#xff0c;避免误操作造成人身伤害或设备损…

亲测广东等离子处理机厂家

等离子表面处理技术&#xff1a;如何甄选真正可靠的设备制造商&#xff1f;在制造业向绿色、精密化转型的浪潮中&#xff0c;等离子表面处理机作为一种高效、环保的预处理技术&#xff0c;正日益成为提升产品性能与合格率的关键装备。然而&#xff0c;面对市场上琳琅满目的设备…

智能表格识别技术突破传统OCR局限,实现复杂纸质表格的精准数字化转换

当你翻出一张泛黄的纸质电费单、一份密密麻麻的医院化验报告&#xff0c;或是一本夹着复杂统计表格的老年鉴&#xff0c;是否曾想过&#xff1a;这些看似“沉默”的纸面信息&#xff0c;能不能一键变成电脑里整齐可查的电子表格&#xff1f;过去&#xff0c;答案往往是“难”—…

这几款iPhone“邪修”软件,好用到逆天!

在日常使用iPhone的过程中&#xff0c;不知道屏幕前的你是否和我一样&#xff0c;总希望有一些“神奇”的APP&#xff0c;能悄无声息地提升效率、丰富生活&#xff0c;甚至帮你完成一些看似不可能的任务&#xff1f;本篇内容&#xff0c;小编就为大家精心推荐7款被不少用户称为…

【开题答辩全过程】以 基于小程序的精品衣柜系统的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

[大模型架构] LangGraph AI 工作流编排(15)

一、LangGraph 核心概念拆解&#xff08;理解工作流的 “骨架”&#xff09; 视频首先系统讲解 LangGraph 的核心组件与设计思想&#xff0c;避免开发者因概念模糊导致后续开发踩坑&#xff0c;核心围绕 “状态&#xff08;State&#xff09;、节点&#xff08;Node&#xff0…

【开题答辩全过程】以 基于Java的健身俱乐部管理系统的设计与开发为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

【大数据毕设推荐】基于Spark的大学排名数据可视化系统,Python+Hadoop技术栈详解 毕业设计 选题推荐 毕设选题 数据分析 机器学习

✍✍计算机毕设指导师** ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡有什么问题可以…

【开题答辩全过程】以 基于Web技术的知识付费平台为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…