本教程使用代码示例介绍如何声明,初始化和打印Java ArrayList。您还将了解Java的2D Arraylist和ArrayList的实现:
ArrayList是数据结构,是Collections Framework的一部分,可以看作类似于数组和向量。
ArrayList可以看作是动态数组,它使您可以随时或简单地说动态地添加或删除元素。
换句话说,它的大小可以动态增加或减少,这与数组的大小一旦声明就保持静态是不同的。
Java中的ArrayList类
Java中的ArrayList数据结构由ArrayList类表示,该类是“ java.util ”包的一部分。
ArrayList类的层次结构如下所示。
如您所见,ArrayList类实现了List接口,该接口又从Collection接口扩展而来。
ArrayList类的一般定义如下:
|
以下是ArrayList的一些区别特征:
- Java的ArrayList类通过维护插入顺序来存储元素。
- ArrayList允许在其中存储重复的元素。
- ArrayList不同步,这是区分ArrayList和Java中的Vector类的要点。
- Java中的ArrayList与C ++中的Vectors更加相同。
- Java中的ArrayList还使用数组之类的索引,并支持随机访问。
- ArrayList中元素的操作很慢,因为如果要从ArrayList中删除任何元素,则需要进行许多元素移位。
- ArrayList类不能包含基本类型,而只能包含对象。在这种情况下,我们通常将其称为“对象的ArrayList”。因此,如果要存储元素的整数类型,则必须使用包装器类的Integer对象,而不要使用原始类型int。
创建并声明ArrayList
为了在程序中使用ArrayList类,您需要首先使用“ import”指令将其包括在程序中,如下所示:
|
要么
|
将ArrayList类导入程序后,就可以创建ArrayList对象。
常规ArrayList创建语法为:
ArrayList <data_type> arrayList = new ArrayList <>();
除了上述使用默认构造函数的语句之外,ArrayList类还提供了其他可重载的构造函数,可用于创建ArrayList。
构造方法
Java中的ArrayList类提供以下构造函数方法来创建ArrayList。
方法1:ArrayList()
此方法使用ArrayList类的默认构造函数,并用于创建一个空的ArrayList。
此方法的一般语法为:
ArrayList <数据类型>列表名称=new ArrayList <>();
例如,您可以使用以下语句创建String类型的通用ArrayList。
|
这将创建一个名为String的空ArrayList,名称为“ arraylist”。
方法2:ArrayList(整数容量)
此重载的构造函数可用于创建具有指定大小或容量(作为构造函数的参数提供)的ArrayList。
此方法的一般语法为:
ArrayList <数据类型>列表名称=new ArrayList <>(int容量);
例:
|
上面的语句创建一个空的ArrayList,名称为'arraylist',类型为Integer,容量为10。
方法3:ArrayList(Collection <?扩展E> c)
ArrayList类的第三个重载构造函数将一个已经存在的集合作为参数,并使用指定集合c中的元素作为其初始元素创建一个ArrayList。
使用此构造函数初始化ArrayList的一般语法为:
ArrayList <数据类型>列表名称=new ArrayList <>(集合c)
例如,如果intList是一个包含元素{10,20,30,40,50}的现有集合,则以下语句将创建一个列表'arraylist',并将intList的内容作为其初始元素。
|
ArrayList类还支持各种可用于操作列表内容的方法。我们将在即将到来的教程“ Java中的ArrayList方法”中详细讨论这些方法。
用Java初始化ArrayList
创建ArrayList后,可以通过多种方法用值初始化ArrayList。在本节中,我们将讨论这些方式。
#1)使用Arrays.asList
在这里,您可以使用Arrays类的asList方法传递一个转换为List的Array,以初始化ArrayList。
通用语法:
|
例:
|
输出:
#2)使用匿名内部类方法
在这里,我们使用匿名内部类将ArrayList初始化为值。
使用匿名内部类进行ArrayList初始化的一般语法如下:
ArrayList <数据类型> arraylistName =new ArrayList <数据类型>(){{
add(对象o1); add(对象o2);…
add(对象);}};
例:
import java.util.*;
public class Main {
public static void main(String args[]) {
//create and initialize ArrayList with anonymous inner class calls
ArrayList<String> colors = new ArrayList<String>(){{
add("Red");
add("Blue");
add("Purple");
}};
//print the ArrayList
System.out.println("Content of ArrayList:"+colors);
}
}
输出:
#3)使用添加方法
这是将元素添加到任何集合的常用方法。
使用add方法将元素添加到ArrayList的一般语法为:
ArrayList <数据类型> ArraylistName =new ArrayList <数据类型>();
ArraylistName.add(value1);
ArraylistName.add(value2);
ArraylistName.add(value3);
编程实例:
|
输出:
#4)使用Collection.nCopies方法
此方法用于使用相同的值初始化ArrayList。我们提供要初始化的元素数和该方法的初始值。
初始化的一般语法为:
ArrayList <数据类型> arrayListName =new
ArrayList <数据类型>(Collections.nCopies(count,element));
下面的示例演示了使用Collections.nCopies方法进行的数组初始化。
|
输出:
遍历ArrayList
我们有以下几种方式遍历或遍历ArrayList:
- 使用for循环
- 通过for-each循环(增强的for-loop)。
- 使用Iterator界面。
- 通过ListIterator接口。
- 通过forEachRemaining()方法。
实际上,通常使用这些方法来遍历集合。在本教程中,我们将看到与ArrayList有关的每种方法的示例。
#1)使用for循环
基于索引的for循环可用于遍历ArrayList并打印其元素。
以下是使用for循环遍历和打印ArrayList的示例。
import java.util.*;
public class Main
{
public static void main(String[] args) {
//create a list
List<Integer> intList = new ArrayList<>();
intList.add(10);
intList.add(20);
intList.add(30);
intList.add(40);
intList.add(50);
//create & initialize a new ArrayList with previous list
ArrayList<Integer> arraylist = new ArrayList<>(intList);
System.out.println("Contents of ArrayList using for-loop:");
//use for loop to traverse through its elements and print it
for(int i=0;i<intList.size();i++){
System.out.print(intList.get(i) + " ");
}
}
}
输出:
这是遍历和打印ArrayList元素的最简单,最简单的方法,在其他集合的情况下也是如此。
#2)通过for-each循环(增强的for循环)
您也可以使用for-each循环或增强的for循环遍历ArrayList。在Java 8之前,它不包含lambda表达式。但是从Java 8开始,您还可以在for-each循环中包括Lambda表达式。
下面的程序演示了对每个循环和lambda表达式使用ArrayList的遍历和打印。
|
输出:
#3)使用迭代器接口
在前面的主题中,我们已经详细了解了Iterator接口。迭代器接口可用于遍历ArrayList并打印其值。
以下程序显示了这一点。
|
输出:
#4)通过ListIterator接口
您还可以使用ListIterator遍历ArrayList。ListIterator可用于向前和向后遍历ArrayList。
让我们实现一个Java程序,该程序演示一个使用ListIterator的示例。
|
输出:
从输出中可以看到,在上面的程序中,使用ListIterator的hasPrevious()和previous()方法向后遍历ArrayList。
#5)通过forEachRemaining()方法
这是遍历ArrayList的方法之一,自Java 8起可用。
下面的程序演示了遍历ArrayList的forEachRemaining()方法。
|
输出:
我们将forEachRemaining()方法与Iterator一起使用。它与每个相似,我们在此方法内部使用lambda表达式。
ArrayList Java示例
在本节中,我们将看到Java中的ArrayList实现。作为示例,我们将通过创建,初始化和使用Java ArrayList执行各种操作来实现一个完整的示例。
|
输出:
Java中的二维ArrayList
我们知道ArrayList没有像Arrays这样的维度。但是我们可以嵌套ArrayList,也称为“ 2D ArrayLists”或“ ArrayLists的ArrayList”。
这些嵌套的ArrayList背后的简单思想是,给定一个ArrayList,此ArrayList的每个元素都是另一个ArrayList。
让我们使用以下程序了解这一点。
|
输出:
上面的程序显示了2D ArrayList。在这里,首先,我们声明一个ArrayLists的ArrayList。然后,我们定义单独的ArrayList,将每个ArrayList添加到嵌套ArrayList时,它们将作为嵌套ArrayList的各个元素。
要访问ArrayList的每个元素,我们需要调用get方法两次。首先访问嵌套ArrayList的行,然后访问行和列的各个交集。
请注意,您可以增加ArrayList的嵌套级别来定义多维ArrayList。例如, 3D ArrayList将具有2D ArrayLists作为其元素,依此类推。
经常问的问题
Q#1)Java中的ArrayList是什么?
答: Java中的ArrayList是动态数组。它本质上是可调整大小的,即在添加新元素时会增加大小,而在删除元素时会缩小。
Q#2)Array和ArrayList有什么区别?
答:数组为静态结构,声明后就无法更改其大小。ArrayList是动态数组,在添加或删除元素时会更改其大小。
数组是Java中的基本结构,而ArrayList是Java中Collection Framework的一部分。另一个区别是,虽然Array使用下标([])访问元素,但ArrayList使用方法访问其元素。
Q#3)ArrayList是一个列表吗?
答: ArrayList是列表的子类型。ArrayList是一个类,而List是一个接口。
Q#4)ArrayList是集合吗?
答:不能。ArrayList是Collection的实现,后者是一个接口。
Q#5)ArrayList如何增加其大小?
答:内部ArrayList被实现为Array。ArrayList有一个size参数。将元素添加到ArrayList并达到size值时,ArrayList在内部添加另一个数组以容纳新元素。
结论
这是有关Java ArrayList类基础知识的教程。我们已经看到了ArrayList类的创建和初始化以及ArrayList的详细编程实现。
我们还讨论了2D和多维ArrayList。ArrayList类支持各种可用于操作元素的方法。在我们即将发布的教程中,我们将介绍这些方法。