找回密码
 会员注册
查看: 40|回复: 0

Java数据结构之ArrayList(如果想知道Java中有关ArrayList的知识点,那么只看这一篇就足够了!)

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
73644
发表于 2024-9-3 19:35:59 | 显示全部楼层 |阅读模式
前言:ArrayList是Java中最常用的动态数组实现之一,它提供了便捷的操作接口和灵活的扩展能力,使得在处理动态数据集合时非常方便。本文将深入探讨Java中ArrayList的实现原理、常用操作以及一些使用场景。✨✨✨这里是秋刀鱼不做梦的BLOG✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客在文章开始之前,先让我们看一下本文的大致内容:目录1.认识ArrayList2.ArrayList的创建(1)使用默认构造函数创建一个空的ArrayList:(2)使用带有初始容量的构造函数创建ArrayList:(3)使用ArrayList(Collectionc)构造函数创建ArrayList 的简单示例:3.ArrayList的遍历遍历ArrayList的方式:        (1)使用for循环    (2)使用增强型for循环:        (3)使用迭代器4.ArrayList常用API        (1)booleanadd(Ee)——尾插e        (2)voidadd(intindex,Eelement)——将e插入到index位置        (3)booleanaddAll(Collectionc)——尾插c中的元素        (4)Eremove(intindex)——删除index位置元素        (5)booleanremove(Objecto)——删除遇到的第一个o        (6)Eget(intindex)——获取下标index位置元素        (7)Eset(intindex,Eelement)——将下标index位置元素设置为element        (8)voidclear()——清空        (9)booleancontains(Objecto)——判断o是否在线性表中        (10)intindexOf(Objecto)——返回第一个o所在下标        (11)intlastIndexOf(Objecto)——返回最后一个o的下标        (12)ListsubList(intfromIndex,inttoIndex)——截取部分list1.认识ArrayList    在正式的学习ArrayList之前,我们需要了解一下什么是Java中的ArrayList(顺序表):        ArrayList是Java中的一个动态数组类,它实现了List接口,可以存储任意类型的对象,并且大小可以动态地调整。ArrayList允许在列表的任意位置进行元素的插入、删除、获取等操作,而且它还能自动扩展内部数组的容量,以适应存储需求的增长。ArrayList是一个普通的类,实现了List接口,具体框架图如下:读到这就会有读者发问了,ArrayList到底是怎么去实现这些功能的呢?,它的底层原理到底是怎么样的呢?答案如下:ArrayList的实现原理:        ArrayList的内部实现是基于数组的,它使用一个Object类型的数组来存储元素。当创建一个ArrayList实例时,会初始化一个默认大小的数组,当数组容量不足以存储新的元素时,ArrayList会自动扩展数组的大小,通常会将当前数组的容量增加一倍,并将原来的元素复制到新数组中,当然其他的操作也是类似。通过上面的描述,我们就大致的了解了Java中ArrayList(顺序表)了。2.ArrayList的创建    了解完了Java中ArrayList(顺序表),那么我们如何去创建并使用它呢?在Java中给我们提供了三种创建ArrayList(顺序表)的方式。创建方式解释ArrayList()无参构造ArrayList(intinitialCapacity)指定顺序表初始容量ArrayList(Collectionc)利用其他Collection构建ArrayList现在让我们使用三种不同的方式来创建一下ArrayList(顺序表): (1)使用默认构造函数创建一个空的ArrayList:importjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args){//创建一个空的ArrayListArrayListlist1=newArrayList();//添加元素到ArrayList(这里可以先看一下就可以)list1.add("Apple");list1.add("Banana");list1.add("Orange");//打印ArrayListSystem.out.println("ArrayList1:"+list1);}}(2)使用带有初始容量的构造函数创建ArrayList:importjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args){//创建一个具有初始容量的ArrayListArrayListlist2=newArrayList(5);//添加元素到ArrayList(这里先看一下就可以)list2.add(10);list2.add(20);list2.add(30);//打印ArrayListSystem.out.println("ArrayList2:"+list2);}}(3)使用ArrayList(Collectionc)构造函数创建ArrayList 的简单示例:importjava.util.ArrayList;importjava.util.List;publicclassMain{publicstaticvoidmain(String[]args){//创建一个包含初始元素的集合ListoriginalList=newArrayList();originalList.add("Apple");originalList.add("Banana");originalList.add("Orange");//使用原始集合创建一个新的ArrayListArrayListnewList=newArrayList(originalList);//打印新的ArrayListSystem.out.println("NewArrayList:"+newList);}}这样我们就了解了如何在Java中创建ArrayList(顺序表)了。3.ArrayList的遍历    在认识ArrayList的段落中,我们知道了ArrayList的底层是一个动态数组,既然是数组的话,我们是不是可以像遍历数组一样遍历ArrayList呢?答案是——是的,但是在此之上我们还可以使用迭代器对其进行遍历。遍历ArrayList的方式:        (1)使用for循环for(inti=0;iiterator=list.iterator();while(iterator.hasNext()){intelement=iterator.next();System.out.println(element);}        以上就是三种遍历Java中ArrayList的方式,每种方式都有其适用的场景,我们需要根据实际需求选择最合适的方式来遍历ArrayList对象。4.ArrayList常用API    在上文中,我们大致的了解了什么是Java中的ArrayList,以及学会了创建和遍历Java中的ArrayList,现在让我们学习一下Java中提供给我们的ArrayList中的常用API。先让我们看一下有哪些常用的ArrayList中的API:常用方法解释booleanadd(Ee)尾插evoidadd(intindex,Eelement)将e插入到index位置booleanaddAll(Collectionc)尾插c中的元素Eremove(intindex)删除index位置元素booleanremove(Objecto)删除遇到的第一个oEget(intindex)获取下标index位置元素Eset(intindex,Eelement)将下标index位置元素设置为elementvoidclear()清空booleancontains(Objecto)判断o是否在线性表中intindexOf(Objecto)返回第一个o所在下标intlastIndexOf(Objecto)返回最后一个o的下标ListsubList(intfromIndex,inttoIndex)截取部分list这里我们一个一个的进行实例演示:        (1)booleanadd(Ee)——尾插eimportjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args){//创建一个空的ArrayListArrayListlist=newArrayList();//向ArrayList中添加元素list.add("Apple");//打印添加操作的结果System.out.println(list);//输出:Apple}}        在这个示例中,我们创建了一个空的ArrayList,然后使用add()方法向其中添加了一个元素"Apple",最后打印了list。            (2)voidadd(intindex,Eelement)——将e插入到index位置importjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args){//创建一个空的ArrayListArrayListlist=newArrayList();//向ArrayList中指定位置添加元素list.add("Apple");list.add("Banana");list.add("Orange");System.out.println(list);//输出:[Apple,Banana,Orange]list.add(1,"Grapes");//在索引1处添加元素"Grapes"//打印添加后的ArrayListSystem.out.println(list);//输出:[Apple,Grapes,Banana,Orange]}}        在这个示例中,我们创建了一个空的ArrayList,然后使用add()方法向其中添加了三个元素:"Apple"、"Banana"和"Orange"。接着,我们使用add(intindex,Eelement)方法在索引1处添加了元素"Grapes"。最后,我们打印了添加后的ArrayList,可以看到"Grapes"被成功添加到了索引1处。        (3)booleanaddAll(Collectionc)——尾插c中的元素importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;publicclassMain{publicstaticvoidmain(String[]args){//创建一个空的ArrayListArrayListlist1=newArrayList();list1.add("Apple");list1.add("Banana");//创建一个包含元素的集合ListelementsToAdd=Arrays.asList("Orange","Grapes");//使用addAll()方法将集合中的元素添加到ArrayList中list1.addAll(elementsToAdd);//打印最终的ArrayListSystem.out.println(list1);//输出:[Apple,Banana,Orange,Grapes]}}        在这个示例中,我们创建了一个空的ArrayList,然后向其中添加了两个元素:"Apple"和"Banana"。接着,我们创建了一个包含两个元素的集合elementsToAdd。最后,我们使用addAll()方法将集合elementsToAdd中的元素添加到ArrayList中。        (4)Eremove(intindex)——删除index位置元素importjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args){//创建一个包含几个元素的ArrayListArrayListlist=newArrayList();list.add("Apple");list.add("Banana");list.add("Orange");//打印原始的ArrayListSystem.out.println("OriginalArrayList:"+list);//输出:[Apple,Banana,Orange]//移除索引为1处的元素StringremovedElement=list.remove(1);//打印被移除的元素和最终的ArrayListSystem.out.println("Removedelement:"+removedElement);//输出:BananaSystem.out.println("FinalArrayList:"+list);//输出:[Apple,Orange]}}        在这个示例中,我们创建了一个包含三个元素的ArrayList,然后使用remove(intindex)方法移除了索引为1处的元素"Banana"。最后,我们打印了被移除的元素和最终的ArrayList,可以看到"Banana"被成功移除了。        (5)booleanremove(Objecto)——删除遇到的第一个oimportjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args){//创建一个包含几个元素的ArrayListArrayListlist=newArrayList();list.add("Apple");list.add("Banana");list.add("Orange");//打印原始的ArrayListSystem.out.println("OriginalArrayList:"+list);//输出:[Apple,Banana,Orange]//移除元素"Banana"list.remove("Banana");//打印最终的ArrayListSystem.out.println(list);//输出:[Apple,Orange]}}        在这个示例中,我们创建了一个包含三个元素的ArrayList,然后使用remove(Objecto)方法移除了元素"Banana"。最后,我们打印了最终的ArrayList,可以看到"Banana"被成功移除了。        (6)Eget(intindex)——获取下标index位置元素importjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args){//创建一个包含几个元素的ArrayListArrayListlist=newArrayList();list.add("Apple");list.add("Banana");list.add("Orange");//获取索引为1处的元素Stringelement=list.get(1);//打印获取到的元素System.out.println(element);//输出:Banana}}        在这个示例中,我们创建了一个包含三个元素的ArrayList,然后使用get(intindex)方法获取了索引为1处的元素。最后,我们打印了获取到的元素,可以看到获取操作成功返回了"Banana"这个元素。        (7)Eset(intindex,Eelement)——将下标index位置元素设置为elementimportjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args){//创建一个包含几个元素的ArrayListArrayListlist=newArrayList();list.add("Apple");list.add("Banana");list.add("Orange");//打印原始的ArrayListSystem.out.println(list);//输出:[Apple,Banana,Orange]//将索引为1处的元素替换为"Grapes"list.set(1,"Grapes");//打印最终的ArrayListSystem.out.println(list);//输出:[Apple,Grapes,Orange]}}        在这个示例中,我们创建了一个包含三个元素的ArrayList,然后使用set(intindex,Eelement)方法将索引为1处的元素"Banana"替换为"Grapes"。最后,我们打印了最终的ArrayList,可以看到替换操作成功地将"Banana"替换为了"Grapes"。        (8)voidclear()——清空importjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args){//创建一个包含几个元素的ArrayListArrayListlist=newArrayList();list.add("Apple");list.add("Banana");list.add("Orange");//打印原始的ArrayListSystem.out.println(list);//输出:[Apple,Banana,Orange]//使用clear()方法清空ArrayListlist.clear();//打印清空后的ArrayListSystem.out.println(list);//输出:[]}}        在这个示例中,我们创建了一个包含三个元素的ArrayList,然后使用clear()方法清空了该列表。最后,我们打印了清空后的ArrayList,可以看到列表中不再包含任何元素。        (9)booleancontains(Objecto)——判断o是否在线性表中importjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args){//创建一个包含几个元素的ArrayListArrayListlist=newArrayList();list.add("Apple");list.add("Banana");list.add("Orange");//检查ArrayList是否包含元素"Banana"booleancontainsBanana=list.contains("Banana");//打印检查结果System.out.println(containsBanana);//输出:true}}        在这个示例中,我们创建了一个包含三个元素的ArrayList,然后使用contains(Objecto)方法检查列表中是否包含元素"Banana"。最后,我们打印了检查结果,可以看到列表中确实包含"Banana"元素。        (10)intindexOf(Objecto)——返回第一个o所在下标importjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args){//创建一个包含几个元素的ArrayListArrayListlist=newArrayList();list.add("Apple");list.add("Banana");list.add("Orange");//获取元素"Banana"在ArrayList中的索引intindex=list.indexOf("Banana");//打印索引值System.out.println(index);//输出:1}}        在这个示例中,我们创建了一个包含三个元素的ArrayList,然后使用indexOf(Objecto)方法获取了元素"Banana"在列表中的索引。最后,我们打印了索引值,可以看到"Banana"元素的索引是1。        (11)intlastIndexOf(Objecto)——返回最后一个o的下标importjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args){//创建一个包含几个元素的ArrayListArrayListlist=newArrayList();list.add("Apple");list.add("Banana");list.add("Orange");list.add("Banana");//获取元素"Banana"在ArrayList中的最后一个索引intlastIndex=list.lastIndexOf("Banana");//打印最后一个索引值System.out.println(lastIndex);//输出:3}}        在这个示例中,我们创建了一个包含四个元素的ArrayList,其中包含两个"Banana"元素。然后使用lastIndexOf(Objecto)方法获取了元素"Banana"在列表中的最后一个索引。最后,我们打印了最后一个索引值,可以看到最后一个"Banana"元素的索引是3。        (12)ListsubList(intfromIndex,inttoIndex)——截取部分listimportjava.util.ArrayList;importjava.util.List;publicclassMain{publicstaticvoidmain(String[]args){//创建一个包含几个元素的ArrayListArrayListlist=newArrayList();list.add("Apple");list.add("Banana");list.add("Orange");list.add("Grapes");list.add("Kiwi");//获取子列表,包括索引1到3的元素,但不包括索引3ListsubList=list.subList(1,3);//打印子列表System.out.println(subList);//输出:[Banana,Orange]}}        在这个示例中,我们创建了一个包含五个元素的ArrayList,然后使用subList(intfromIndex,inttoIndex)方法获取了子列表,包括索引1到3的元素,但不包括索引3。最后,我们打印了子列表,可以看到子列表包含了"Banana"和"Orange"元素。注意:        在使用ListsubList(intfromIndex,inttoIndex)方法的时候,我们对获取的子列表进行修改的时候,原来的列表也会被修改。这样我们就大致的了解了Java中ArrayList的常用API了。以上就是本篇文章的全部内容了~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-13 10:40 , Processed in 1.462190 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表