论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
大数据
›
数据仓库与分析
›
ArrayList集合
ArrayList集合
乌市泽哥
论坛元老
|
2023-7-21 16:01:40
|
显示全部楼层
|
阅读模式
楼主
主题
1882
|
帖子
1882
|
积分
5646
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
一. 介绍
ArrayList是List接口的一个实现类,它是Java程序中最常用的集合之一。在ArrayList内部,它使用一个可变长度的数组来存储元素。当向ArrayList中添加元素时,如果当前的数组容量不足以容纳新增的元素,ArrayList会自动进行扩容操作,创建一个更大的数组,并将原始数据复制到新数组中。这样就实现了ArrayList的长度可变性。通过索引可以快速访问和修改ArrayList中的元素,同时也支持进行插入、删除等操作。ArrayList允许null值存在。
ArrayList是有序的数组,当你向ArrayList中添加元素时,它们会按照添加的顺序进行存储,并且保持这个顺序。因此,你可以通过索引来访问ArrayList中的元素,并且它们会按照添加的顺序进行返回。
ArrayList结构图:
ArrayList继承AbstractList,AbstractList是一个抽象类,提供了一些通用的列表操作方法。
ArrayList实现RandomAccess接口,表示允许通过索引直接访问集合中的元素;
ArrayList实现Cloneable接口,表示可以进行克隆操作;
ArrayList实现Serializable接口,表示可以进行序列化操作。
二. ArrayList的优点
动态增长:ArrayList底层数据结构是Object数组(Object[])。在ArrayList中,每次添加、删除、查询等操作都是直接对这个底层的Object数组进行实现。当元素数量超过当前数组长度时,ArrayList会根据需要自动进行扩容操作,通常会创建一个新的更大的数组,并将原有元素复制到新数组中。这样就能保证ArrayList的高效操作和动态调整大小的特性。
高效的随机访问:ArrayList内部以数组形式存储元素,元素是按照索引顺序存储的,每个元素占据连续的内存空间。由于数组具有随机访问的特性,通过索引可以直接计算出元素在内存中的地址,从而实现快速的随机访问操作。因此支持通过索引快速随机访问元素。可以使用get()方法通过索引获取元素,时间复杂度为O(1)。
方便的插入和删除操作:ArrayList提供了丰富的方法来进行元素的插入和删除操作。通过add()方法可以在任意位置插入元素,通过remove()方法可以删除指定位置的元素,或者通过元素值来删除。
支持多种数据类型:ArrayList可以存储任何类型的对象,包括基本数据类型的包装类、自定义对象等。这使得ArrayList成为一个很灵活的集合类,适用于各种场景。
支持迭代操作:ArrayList实现了Iterable接口,因此可以使用增强的for循环或者迭代器来遍历集合中的元素。这使得对ArrayList进行遍历操作变得非常便捷。
需要注意的是,由于ArrayList的底层实现是数组,所以在频繁进行插入和删除操作时,会涉及数组元素的移动,性能可能受到影响。此时可以考虑使用LinkedList等其他集合类来代替ArrayList。
三. 源码分析
成员方法:
private static final int DEFAULT_CAPACITY = 10;
默认初始化容器 = 10;
privatestaticfinal Object[] EMPTY_ELEMENTDATA = {};
用于空实例的共享空数组 ,一般在构造方法指定空容器,或在elementData、size()为0的时候使用。
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}
共享的空数组实例用于默认大小的空实例。我们通过区分它与EMPTY_ELEMENTDATA来知道在添加第一个元素时需要扩容多少。
ransient Object[] elementData;
ArrayList的内部使用数组缓冲区来存储其元素。
ArrayList的容量是该数组缓冲区的长度。当第一个元素被添加到elementData为DEFAULTCAPACITY_EMPTY_ELEMENTDATA的空ArrayList时,它将会被扩展到DEFAULT_CAPACITY(默认容量)。
private int size;
ArrayList的大小(包含的元素数)
构造方法:
1. 构造一个具有指定初始容量的空列表。
@param initialCapacity 列表的初始容量
@throws IllegalArgumentException 如果指定的初始容量为负,则声明非法数据异常
public ArrayList(int initialCapacity) { // 该构造方法指定初始容量
if (initialCapacity > 0) { // 如果初始容量>0 则 elementData.size() = 初始容量
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) { // 如果初始容量=0 则elementData.size() = 0 (EMPTY_ELEMENTDATA )
this.elementData = EMPTY_ELEMENTDATA;
} else { // 如果初始化容量
继续阅读请点击广告
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
乌市泽哥
论坛元老
这个人很懒什么都没写!
楼主热帖
是什么让.NET7的Min和Max方法性能暴增 ...
@RequestParam,@PathVariable两个注解 ...
SqlServer远程连接
2019 第十届蓝桥杯大赛软件赛决赛,国 ...
聚焦企业开放OpenAPI痛难点,华为云API ...
7 行代码搞崩溃 B 站,原因令人唏嘘! ...
售前的职场生存法则
想入行SAP咨询,最具性价比的方式 ...
活动 | 塑造软件新生态 赋能发展新变革 ...
MySQL审计插件-MariaDB Audit Plugin ...
标签云
国产数据库
集成商
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表