ArrayList是 收集框架 并在java中出现。util包。它为我们提供了Java中的动态数组。不过,它可能比标准数组慢,但在需要对数组进行大量操作的程序中可能会有所帮助。这个类在 JAVAutil 包裹
插图:
例子: 下面的实现演示了如何创建和使用ArrayList。
JAVA
// Java program to demonstrate the // working of ArrayList in Java import java.io.*; import java.util.*; class ArrayListExample { public static void main(String[] args) { // Size of the // ArrayList int n = 5 ; // Declaring the ArrayList with // initial size n ArrayList<Integer> arrli = new ArrayList<Integer>(n); // Appending new elements at // the end of the list for ( int i = 1 ; i <= n; i++) arrli.add(i); // Printing elements System.out.println(arrli); // Remove element at index 3 arrli.remove( 3 ); // Displaying the ArrayList // after deletion System.out.println(arrli); // Printing elements one by one for ( int i = 0 ; i < arrli.size(); i++) System.out.print(arrli.get(i) + " " ); } } |
[1, 2, 3, 4, 5][1, 2, 3, 5]1 2 3 5
由于ArrayList是一个动态数组,我们在创建它时不必指定大小,因此当我们动态添加和删除项时,数组的大小会自动增加。虽然实际的库实现可能更复杂,但以下是一个非常基本的想法,解释了当数组变满时,以及如果我们尝试添加一个项,该数组的工作原理:
- 在堆内存上创建更大的内存(例如,大小加倍的内存)。
- 将当前内存元素复制到新内存中。
- 现在添加了新项,因为现在有更大的可用内存。
- 删除旧的记忆。
重要特点:
- ArrayList继承 摘要列表 类并实现 列表界面 .
- ArrayList由大小初始化。但是,如果集合增加或缩小,则大小会自动增加 物体 已从集合中删除。
- Java ArrayList允许我们随机访问列表。
- ArrayList不能用于 基本类型 ,比如int,char等等。我们需要一个 包装类 对于这种情况。
- Java中的ArrayList可以被视为 C++中的向量 .
- ArrayList未同步。它在Java中的等效同步类是 矢量 .
让我们了解 Java ArrayList深度 .请看下图:
在上图中, 摘要列表 , CopyOnWriteArrayList ,以及 摘要顺序表 是实现列表接口的类。上述每个类中都实现了单独的功能。他们是:
- 摘要列表: 这个类用于实现一个不可修改的列表,对于这个列表,只需要扩展这个AbstractList类并实现 得到() 还有 大小() 方法。
- CopyOnWriteArrayList: 此类实现列表接口。它是的增强版 ArrayList 所有修改(添加、设置、删除等)都是通过制作列表的新副本来实现的。
- 摘要顺序列表: 这个类实现了 收集接口 还有AbstractCollection类。这个类用于实现一个不可修改的列表,对于这个列表,只需要扩展这个AbstractList类并实现 得到() 还有 大小() 方法。
ArrayList中的构造函数
为了创建ArrayList,我们需要创建ArrayList类的对象。ArrayList类由各种 建设者 允许创建数组列表。以下是该类中可用的构造函数:
1.ArrayList(): 此构造函数用于构建空数组列表。如果我们想创建一个名为 啊 ,则可将其创建为:
ArrayList arr=新的ArrayList();
2.ArrayList(集合c): 此构造函数用于构建用集合c中的元素初始化的数组列表。假设我们希望创建一个ArrayList arr,其中包含集合c中存在的元素,则可以将其创建为:
ArrayList arr=新的ArrayList(c);
3.ArrayList(内部容量): 此构造函数用于构建指定初始容量的数组列表。假设我们希望创建一个初始大小为N的ArrayList,那么它可以创建为:
ArrayList arr=新的ArrayList(N);
Java ArrayList中的方法
方法 | 描述 |
---|---|
添加(int索引,对象元素) | 此方法用于在列表中的特定位置索引处插入特定元素。 |
添加(对象o) | 此方法用于将特定元素附加到列表的末尾。 |
addAll(集合C) | 此方法用于将特定集合中的所有元素附加到所述列表的末尾,顺序是指定集合的迭代器返回值。 |
addAll(整数索引,集合C) | 用于将特定集合中从指定位置开始的所有元素插入上述列表。 |
清除() | 此方法用于从任何列表中删除所有元素。 |
克隆() | 此方法用于返回ArrayList的浅层副本。 |
包含?(对象o) | 如果此列表包含指定的元素,则返回true。 |
你有能力吗?(单位容量) | 如有必要,请增加此ArrayList实例的容量,以确保它至少可以容纳最小容量参数指定的元素数。 |
弗雷奇?(消费者行动) | 对Iterable的每个元素执行给定的操作,直到所有元素都已处理或该操作引发异常。 |
收到(整数索引) | 返回此列表中指定位置的元素。 |
indexOf(对象O) | 返回特定元素第一次出现时的索引,如果该元素不在列表中,则返回-1。 |
我是空的?() | 如果此列表不包含任何元素,则返回true。 |
lastIndexOf(对象O) | 如果某个元素不在列表中,则返回该元素最后一次出现的索引或-1。 |
列表迭代器?() | 返回此列表中元素的列表迭代器(按正确顺序)。 |
列表迭代器?(整数索引) | 返回列表中元素的列表迭代器(按正确顺序),从列表中的指定位置开始。 |
去除(整数索引) | 删除此列表中指定位置的元素。 |
去除(对象o) | 从该列表中删除第一个出现的指定元素(如果存在)。 |
removeAll?(c组) | 从此列表中删除指定集合中包含的所有元素。 |
移除?(谓词过滤器) | 删除此集合中满足给定谓词的所有元素。 |
安吉?(int-fromIndex,int-to-Index) | 从该列表中删除索引介于fromIndex(包含)和toIndex(独占)之间的所有元素。 |
保留?(收集c) | 仅保留此列表中包含在指定集合中的元素。 |
设置(整数索引,E元素) | 用指定的元素替换此列表中指定位置的元素。 |
大小() | 返回此列表中的元素数。 |
拆分器?() | 在此列表中的元素上创建延迟绑定和快速故障拆分器。 |
子列表?(int-fromIndex,int-to-Index) | 返回此列表中指定的fromIndex(包含)和toIndex(独占)之间部分的视图。 |
toArray() | 此方法用于按正确顺序返回包含列表中所有元素的数组。 |
toArray(对象[]O) | 它还用于返回包含此列表中所有元素的数组,其顺序与前面的方法相同。 |
trimToSize() | 此方法用于将ArrayList实例的容量调整为列表的当前大小。 |
注: 您还可以创建通用ArrayList:
// Creating generic integer ArrayListArrayList<Integer> arrli = new ArrayList<Integer>();
让我们看看如何在ArrayList上执行一些基本操作,我们将在实现每个操作的同时进一步讨论这些操作。
- 向列表中添加元素
- 变化的元素
- 移除元素
- 迭代元素
操作1: 添加元素
为了向ArrayList添加元素,我们可以使用 add()方法 。此方法被重载以基于不同参数执行多个操作。详情如下:
- add(Object):此方法用于在ArrayList的末尾添加元素。
- add(int index,Object):此方法用于在ArrayList中的特定索引处添加元素。
例子:
JAVA
// Java Program to Add elements to An ArrayList // Importing all utility classes import java.util.*; // Main class class GFG { // Main driver method public static void main(String args[]) { // Creating an Array of string type ArrayList<String> al = new ArrayList<>(); // Adding elements to ArrayList // Custom inputs al.add( "Geeks" ); al.add( "Geeks" ); // Here we are mentioning the index // at which it is to be added al.add( 1 , "For" ); // Printing all the elements in an ArrayList System.out.println(al); } } |
[Geeks, For, Geeks]
操作2: 变化的元素
添加元素后,如果我们希望更改元素,可以使用 set() 方法因为ArrayList是索引的,所以我们希望更改的元素被该元素的索引引用。因此,该方法采用一个索引和需要插入该索引的更新元素。
实例
JAVA
// Java Program to Change elements in ArrayList // Importing all utility classes import java.util.*; // main class class GFG { // Main driver method public static void main(String args[]) { // Creating an Arratlist object of string type ArrayList<String> al = new ArrayList<>(); // Adding elements to Arraylist // Custom input elements al.add( "Geeks" ); al.add( "Geeks" ); // Adding specifying the index to be added al.add( 1 , "Geeks" ); // Printing the Arraylist elements System.out.println( "Initial ArrayList " + al); // Setting element at 1st index al.set( 1 , "For" ); // Printing the updated Arraylist System.out.println( "Updated ArrayList " + al); } } |
Initial ArrayList [Geeks, Geeks, Geeks]Updated ArrayList [Geeks, For, Geeks]
操作3: 移除元素
为了从ArrayList中删除元素,我们可以使用 remove()方法 。此方法被重载以基于不同参数执行多个操作。详情如下:
- 移除(对象): 此方法仅用于从ArrayList中删除对象。如果有多个这样的对象,则删除该对象的第一个引用。
- 删除(int索引): 由于ArrayList是索引的,因此该方法采用一个整数值,该整数值只需删除ArrayList中该特定索引处的元素。移除元素后,所有元素都会向左移动以填充空间,对象的索引也会更新。
实例
JAVA
// Java program to Remove Elements in ArrayList // Importing all utility classes import java.util.*; // Main class class GFG { // Main driver method public static void main(String args[]) { // Creating an object of arraylist class ArrayList<String> al = new ArrayList<>(); // Adding elements to ArrayList // Custom addition al.add( "Geeks" ); al.add( "Geeks" ); // Adding element at specific index al.add( 1 , "For" ); // Printing all elements of ArrayList System.out.println( "Initial ArrayList " + al); // Removing element from above ArrayList al.remove( 1 ); // Printing the updated Arraylist elements System.out.println( "After the Index Removal " + al); // Removing this word element in ArrayList al.remove( "Geeks" ); // Now printing updated ArrayList System.out.println( "After the Object Removal " + al); } } |
Initial ArrayList [Geeks, For, Geeks]After the Index Removal [Geeks, Geeks]After the Object Removal [Geeks]
操作4: 迭代ArrayList
有多种方法可以遍历ArrayList。最著名的方法是使用基本的 循环 结合 get()方法 获取特定索引处的元素和 先进的for-loop .
实例
JAVA
// Java program to Iterate the elements // in an ArrayList // Importing all utility classes import java.util.*; // Main class class GFG { // Main driver method public static void main(String args[]) { // Creating an Arraylist of string type ArrayList<String> al = new ArrayList<>(); // Adding elements to ArrayList // using standard add() method al.add( "Geeks" ); al.add( "Geeks" ); al.add( 1 , "For" ); // Using the Get method and the // for loop for ( int i = 0 ; i < al.size(); i++) { System.out.print(al.get(i) + " " ); } System.out.println(); // Using the for each loop for (String str : al) System.out.print(str + " " ); } } |
Geeks For Geeks Geeks For Geeks
必须阅读: Java中的数组与ArrayList