【Java ArrayList】从入门到精通:从概念,使用到扩容机制,一篇带你掌握Java动态数组核心

【Java ArrayList】从入门到精通:从概念,使用到扩容机制,一篇带你掌握Java动态数组核心
在这里插入图片描述
🎁个人主页:User_芊芊君子
🎉欢迎大家点赞👍评论📝收藏⭐文章
🔍系列专栏:Java.数据结构
在这里插入图片描述


在这里插入图片描述


【前言】

ArrayList 是 Java 集合框架(Java Collections Framework)中最常用的动态数组实现,它提供了灵活的容量管理、便捷的增删改查操作,广泛应用于日常开发中。本文将深入剖析 ArrayList 的底层结构、核心方法源码、性能特点及最佳实践,帮助读者彻底掌握这一基础数据结构。

文章目录:

一、ArrayList的概念

ArrayList基于动态数组实现,底层维护一个Object[ ]数组,elementDate存储元素,同时通过size变量记录当前有效元素个数,容量可自动扩容。它实现了List接口,如下图:

在这里插入图片描述
ArrayList是以泛型方式实现,使用时必须实例化;ArrayList实现RandomAccess接口,ArrayList可随机访问;ArrayList实现Cloneable接口,ArrayList可以克隆;ArrayList实现Serializable接口,支持序列化;ArrayList不是线程安全,在单线程下可以使用在多线程中可以选择Vector或者CopyOnWriteArrayList;ArrayList底层是一段连续的空间,可以自动扩容,是一个动态类型的顺序表

二、ArrayList的使用

1.构造ArrayList

ArrayList提供三种构造函数:

方法说明
ArrayList()无参构造
ArrayList(Collection<? extends E> c)利用其他Collection构建ArrayList
ArrayList(int initialCapacity)指定顺序表初始容量

1.1 无参构造方法

publicstaticvoidmain(String[] args){//创建一个空的ArrayListArrayList<Integer> list =newArrayList<>(); list.add(1); list.add(2); list.add(3);System.out.println(list);}

【源码:】

在这里插入图片描述

1. 2 带有初始容量的构造方法

//创建一个有初始容量的ArrayListArrayList<Integer> list2 =newArrayList<>(5); list2.add(22); list2.add(33); list2.add(44);System.out.println(list2);

【源码:】

在这里插入图片描述

1.3 用其他集合类构造ArrayList

类型一定是实现了Collection接口传的参数要是E或E的子类
//创建一个有初始容量的ArrayListArrayList<Integer> list2 =newArrayList<>(5); list2.add(22); list2.add(33); list2.add(44);System.out.println(list2);//都是Integer类型,可以传ArrayList<Integer> list3 =newArrayList<>(list2);

【源码:】

在这里插入图片描述

2.操作方法

方法签名描述
boolean add(E e)将元素 e 插入到列表末尾
void add(int index, E element)将元素 e 插入到指定的 index 位置
boolean addAll(Collection<? extends E> c)将集合 c 中的所有元素插入到列表末尾
E remove(int index)删除并返回指定 index 位置的元素
boolean remove(Object o)删除列表中第一个遇到的元素 o
E get(int index)获取指定 index 位置的元素
E set(int index, E element)将指定 index 位置的元素替换为 element
void clear()清空列表中的所有元素
boolean contains(Object o)判断列表中是否包含元素 o
int indexOf(Object o)返回第一个匹配元素 o 的索引
int lastIndexOf(Object o)返回最后一个匹配元素 o 的索引
List<E> subList(int fromIndex, int toIndex)返回从 fromIndextoIndex 的子列表

2.1 boolean add(E e):尾插e

//创建一个空的ArrayListArrayList<Integer> list =newArrayList<>();//末尾插入1 list.add(1);System.out.println(list);

2.2 void add(int index,E element):将e插入index位置

//创建一个空的ArrayListArrayList<Integer> list =newArrayList<>();//0位置插入1 list.add(0,1);System.out.println(list);

2.3 boolean addAll(Collection<?extends E>c):尾插c中的元素

//创建一个空的ArrayListArrayList<Integer> list =newArrayList<>();//0位置插入1 list.add(1); list.add(11); list.add(111);System.out.println(list);ArrayList<Integer> list2 =newArrayList<>(); list2.addAll(list); list2.add(1111);System.out.println(list2);
在这里插入图片描述

2.4 E remove(int index/Object o)

//创建一个空的ArrayListArrayList<Integer> list =newArrayList<>();//0位置插入1 list.add(1); list.add(11); list.add(111);System.out.println(list); list.remove(2);//下标//对象 list.remove(newInteger(2));Integer x =2;//写法2 list.remove(x);

2.4 ListsubList(int fromIndex,int toIndex):截取list部分

//创建一个空的ArrayListArrayList<Integer> list =newArrayList<>();//0位置插入1 list.add(1); list.add(11); list.add(111); list.add(1111);System.out.println(list);List<Integer> subList = list.subList(1,3);System.out.println(subList);
它的截取是左闭右开,截取1~3位置,取2,3后面如果修改元素,截取的也会随之修改,实际截取的是地址
在这里插入图片描述

一些简单的方法就不一一列举了,直接调用就行,具体的方法实现可以看这篇【Java ArrayList】底层方法的自我实现

三、ArrayList的遍历

1.for循环遍历

for(int i =0; i < list.size(); i++){Integer a = list.get(i);System.out.println(a+" ");}

2.增强型for循环

for(int x : list){System.out.println(x+" ");}

3.迭代器

只要实现Iterable接口,都可以使用迭代器打印
it.next():访问下一个,it望后走一步

Iterator<Integer> it = list.iterator();while(it.hasNext()){System.out.println(it.next()+" ");}

从指定位置开始打印

//可以从指定位置开始打印ListIterator<Integer> it2 = list.listIterator(2);while(it2.hasNext()){System.out.println(it2.next()+" ");}

逆向打印

ListIterator<Integer> it = list.listIterator(list.size());while(it.hasPrevious()){System.out.println(it.previous()+" ");}

四、ArrayList扩容机制

ArrayList是⼀个动态类型的顺序表,在插⼊元素的过程中会⾃动扩容。

如果调⽤不带参数的构造⽅法,第⼀次分配数组⼤⼩为10后续扩容为1.5倍扩容

源码如下:

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

【总结】

ArrayList 是基于动态数组的 List 实现,具有随机访问快、使用便捷的特点,适合大多数读多写少的场景。本文从底层原理、核心方法、性能分析到注意事项,全面剖析了 ArrayList 的特性,希望能帮助读者深入理解并灵活运用这一基础数据结构。

Read more

localpilot模型管理详解:如何快速切换CodeLlama、Mistral和官方Copilot

localpilot模型管理详解:如何快速切换CodeLlama、Mistral和官方Copilot 【免费下载链接】localpilot 项目地址: https://gitcode.com/gh_mirrors/lo/localpilot localpilot是一款强大的模型管理工具,支持快速切换多种AI代码模型,包括CodeLlama、Mistral和官方Copilot。本文将详细介绍如何在localpilot中管理和切换这些模型,帮助你根据需求选择最适合的AI助手。 支持的模型类型 localpilot目前支持以下几种主流代码模型,可在config.py中查看完整配置: * GitHub Copilot:官方远程模型,需要账号授权 * CodeLlama-7b:轻量级本地模型,适合基础代码辅助 * CodeLlama-34b:更强大的本地模型,提供更精准的代码建议 * Mistral-7b:高效的本地模型,平衡性能和资源占用 模型配置文件解析 所有模型配置都集中在config.py文件中,主要包含以下关键部分: models = { 'GitHub':

By Ne0inhk
2026最新AI聚合系统(渐进式AIGC系统):nano-banana-2第二代绘画、VEO3/VEO3.1、Sora-2视频生成大模型私有化独立系统+扣子工作流Agent智能体

2026最新AI聚合系统(渐进式AIGC系统):nano-banana-2第二代绘画、VEO3/VEO3.1、Sora-2视频生成大模型私有化独立系统+扣子工作流Agent智能体

SparkAi系统:渐进式AIGC系统,一款基于OpenAi/ChatGPT、GPT-5.2/GPT-5、最新旗舰大模型Claude-opus-4-6、nano-banana-2第二代绘画大模型、Gemini-3.1-pro、DeepSeek、Sora-2、VEO3.1、Agent智能体 扣子(coze)插件、工作流、函数、知识库 等AI大模型能力开发的一站式AI系统;支持「🤖AI聊天」、「🎨专业AI绘画」、「🧠AI智能体」、「🪟Agent应用」、「🎬AI视频生成」等,支持独立私有部署!提供面向个人用户 (ToC)、开发者 (ToD)、企业 (ToB)的全面解决方案。 一、SparkAi系统/官网 最新旗舰大模型Claude-opus-4-6、GPT-5.3-Codex、GPT-5.2、GPT-5-PRO、gpt-image-1.5绘画大模型、超强生图

By Ne0inhk

GitHub Copilot提示词终极攻略:从“能用”到“精通”的AI编程艺术

摘要:GitHub Copilot作为当前最强大的AI编程助手,其真正的价值不仅在于自动补全代码,更在于开发者如何通过精准的提示词工程与之高效协作。本文系统解析Copilot提示词的核心原理、设计框架与实战技巧,涵盖从基础使用到高级功能的完整知识体系。通过四要素框架、WRAP法则、多场景应用指南,结合表格、流程图等可视化工具,帮助开发者掌握与AI协作的编程范式,提升300%以上的开发效率。文章深度结合当今AI技术发展趋势,提供理论性、可操作性、指导性并存的全面攻略。 关键词:GitHub Copilot、提示词工程、AI编程、代码生成、开发效率、人机协作 🌟 引言:当编程遇见AI,一场思维范式的革命 “写代码就像与一位天才但有点固执的同事合作——你需要用它能理解的语言,清晰地表达你的意图。”这是我在深度使用GitHub Copilot六个月后的最大感悟。 2023年以来,AI编程助手从概念验证走向生产力工具的核心转变,标志着一个新时代的到来。GitHub Copilot不再仅仅是“自动补全工具”,而是具备问答、编辑、自动执行能力的AI开发伙伴。然而,许多开发者仍停留在基础使

By Ne0inhk

一文读懂UGC、PGC、PUGC、OGC、MGC、BGC与AIGC

一文读懂UGC、PGC、PUGC、OGC、MGC、BGC与AIGC 在当今这个信息爆炸的数字时代,我们无时无刻不被各种形式的内容所包围——从短视频、直播到图文资讯、专业评测。你或许经常听到UGC、PGC、AIGC这些听起来很“高级”的缩写,但它们究竟代表什么?彼此之间又有什么区别和联系?今天,就让我们一次性说清楚内容创作领域的各种“GC”(Generated Content)。 文章目录 * 一文读懂UGC、PGC、PUGC、OGC、MGC、BGC与AIGC * 1 核心区别:是“谁”在创作内容? * 2 UGC (User Generated Content) - 用户生成内容 * 3 PGC (Professionally Generated Content) - 专业生成内容 * 4

By Ne0inhk