11.Java基础概念-ArrayList

devtools/2025/1/16 6:56:45/

欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

Facts speak louder than words!


        ArrayList是Java中的一个类,它实现了List接口,是基于动态数组的数据结构。它可以自动扩展以容纳任意数量的元素,并允许随机访问元素。ArrayList是使用数组实现的,所以它具有数组的优点,如随机访问快速,但也有一些缺点,如插入和删除元素时的性能较差。

以下是ArrayList的一些重要特性和用法:

1.自动扩容:当向ArrayList中添加元素时,如果当前容量不足,它会自动增加容量以容纳新元素。这个过程是通过创建一个更大的数组,并将原始数组中的元素复制到新数组中来实现的。根据下面源代码,可以看出数组的默认长度为10。

java">/*** Default initial capacity.*/
private static final int DEFAULT_CAPACITY = 10;private static int calculateCapacity(Object[] elementData, int minCapacity) {if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {return Math.max(DEFAULT_CAPACITY, minCapacity);}return minCapacity;
}

2.随机访问:ArrayList允许通过索引来访问元素。通过调用get(int index)方法,可以获取指定位置的元素。由于ArrayList是基于数组实现的,所以在访问指定位置的元素时速度很快,时间复杂度为O(1)。

java">public static void main(String[] args) {ArrayList<Integer> = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(1);list.add(2);//获取1下标的元素System.out.println(list.get(1));//2//设置0下标的元素为2System.out.println(list.set(0, 2));//1//判断集合中是否存在元素5System.out.println(list.contains(5));//false//返回第一个2出现的位置System.out.println(list.indexOf(2));//0//返回最后一次出现2的位置System.out.println(list.lastIndexOf(2));//4//截取0~3位置的元素List<Integer> sub = list.subList(0,3);System.out.println(sub.toString());// [2, 2, 3]System.out.println(list.toString());// [2, 2, 3, 1, 2]}

3.动态添加和删除元素:ArrayList提供了一系列的方法来添加和删除元素。可以使用add(E element)方法在列表的末尾添加元素,也可以使用add(int index, E element)方法在指定位置插入元素。可以使用remove(int index)方法删除指定位置的元素,也可以使用remove(Object obj)方法删除指定的元素。

java">public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(2);//尾插2System.out.println(list.toString());// [2]list.add(0,1);//0下标插入1System.out.println(list.toString());// [1, 2]//Collection接口的子类List<Integer> list2 = new LinkedList<>();list2.add(3);list2.add(4);list.addAll(list2);//将list2集合中的元素尾插到list中System.out.println(list.toString());// [1, 2, 3, 4]list.addAll(1,list2);//将list2集合中的元素从1下标插入list中System.out.println(list.toString());// [1, 3, 4, 2, 3, 4]}
java">public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(2);list.add(1);//删除下标为0的元素,并返回该元素int n = list.remove(0);System.out.println(n);// 1System.out.println(list.toString());// [2, 3, 2, 1]//删除第一个2//通过显示装箱,将2数字包装成对应的包装类boolean result = list.remove(new Integer(2));System.out.println(result);// trueSystem.out.println(list.toString());// [3, 2, 1]//清空元素list.clear();System.out.println(list.toString());// []}

 

4.遍历元素:可以使用for循环迭代器来遍历ArrayList中的元素。使用for循环时,可以通过调用size()方法来获取列表的大小,然后使用get(int index)方法来获取每个元素。使用迭代器时,可以调用iterator()方法来获取迭代器对象,并使用hasNext()和next()方法来遍历元素。

java">        ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(1);arrayList.add(2);arrayList.add(3);//打印一:forfor (int i = 0; i < arrayList.size(); i++) {System.out.print(arrayList.get(i)+" ");}//打印二:foreachfor (Integer x : arrayList) {System.out.print(x + " ");}System.out.println();//打印三:迭代器//默认是从 0 下标开始打印System.out.println("===Iterator===");Iterator<Integer> it =  arrayList.iterator();//创建迭代器while (it.hasNext()) {System.out.print(it.next() +" ");}System.out.println();System.out.println("===listIterator倒着打印===");//从 指定位置 开始打印     list1.size()ListIterator<Integer> it2 =  arrayList.listIterator(arrayList.size());while (it2.hasPrevious()) {System.out.print(it2.previous() +" ");}System.out.println();

5.泛型支持:ArrayList是一个泛型类,可以指定存储在其中的元素类型。这可以增加代码的类型安全性,并且在编译时可以更好地检测错误。

6.可以存储任意类型的元素:ArrayList可以存储任何类型的对象,包括基本数据类型的包装类,如Integer和Double。

总结起来,ArrayList是一个可变大小的数组,它提供了高效的随机访问和动态添加/删除元素的功能。使用ArrayList可以方便地操作和管理大量的数据。但是需要注意的是,由于ArrayList是基于数组实现的,所以在频繁插入和删除元素时性能较低,这时应该考虑使用LinkedList等其他数据结构。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥The road is long and the line is coming,让我们一起加油吧!🌙🌙🌙


http://www.ppmy.cn/devtools/109834.html

相关文章

嵌入式 面试单片机面试题目分析和答案 IIC总线 IIC协议 SPI总线 I2C协议讲解 SPI和IIC协议对比比较SPI的工作模式比较 IIC基本概念讲解

IIC总线协议 高位先行。MSB在前 iic总线介绍 总线就是SDA和SCL两根 SDA为什么上拉电阻开漏输出 可以多个主机、每个 设备通过唯一的7位地址辨别通信&#xff0c; 多主机总线&#xff0c;主机有权发起和结束一次通信&#xff0c;从机只能被呼叫、每个器件都可以作为主机也…

CentOS文件和目录命令

CentOS文件和目录命令 在CentOS上&#xff0c;文件和目录是操作系统的核心部分&#xff0c;掌握其基本操作是使用Linux的第一步。文件系统是Linux用户和系统进行交互的主要方式&#xff0c;理解文件和目录的管理对于执行各种操作至关重要。以下是CentOS中与文件和目录相关的主…

软考笔记食用指南

知道自己想看什么的就跳转目录去看就好了&#xff0c;不知道自己想看什么的就先看总结知道大概要学什么&#xff0c;要是全部从头到尾乱七八糟的都看一遍那包乱的&#xff08;高手除外&#xff09;。

【系统架构师】-论文-2024-2009年系统架构师历年论文题目

2024年5月 大数据Lambda架构的应用与分析 云原生云上DevOps运维应用与分析 模型驱动软件开发方法与应用 论单元测试在软件回归测试中的应用和分析 2023年 论面向对象设计的应用与实现 论多数据源集成的应用与实现 论软件可靠性模型的设计与实现 论边缘计算技术的设计与实现 …

数据结构题目 第二章

题目 1、线性表的特点是每个元素都有一个前驱和一个后继。 &#xff08; &#xff09; 2、线性表的顺序存储结构是一种&#xff08; &#xff09;的存储结构。 A.随机存取 B.顺序存取 C.索引存取 D.散列存取 3、下述&#xff08; &#xff09;是顺序存储结构的优点。…

随机分类,保持均衡水平Python

1、目的&#xff1a; 10000个样本有4个指标&#xff0c;按照逾期金额分10类&#xff0c;确保每类别逾期金额均衡。 2、数据&#xff1a; 3、思路&#xff1a; 将10000个样本按照逾期金额排序&#xff0c; 等距分箱为2500个类别 增加一列随机数 根据类别和随机数升序排列 增加…

不同粒度的计算计与不同粒度的态、势、感、知

“不同粒度的计算计&#xff08;计算算计&#xff08;谋算&#xff09;&#xff09;”指的是在不同层面或细节上进行的计算或谋划&#xff0c;涉及到对数据、信息或问题的不同分解程度&#xff0c;以获取更精确或更全面的理解。而“不同粒度的态、势、感、知”则更倾向于描述与…

Python 基本库用法:数学建模

文章目录 前言数据预处理——sklearn.preprocessing数据标准化数据归一化另一种数据预处理数据二值化异常值处理 numpy 相关用法跳过 nan 值的方法——nansum和nanmean展开多维数组&#xff08;变成类似list列表的形状&#xff09;重复一个数组——np.tile 分组聚集——pandas.…