Java中的ArrayList

ArrayList是 收集框架 并在java中出现。util包。它为我们提供了Java中的动态数组。不过,它可能比标准数组慢,但在需要对数组进行大量操作的程序中可能会有所帮助。这个类在 JAVAutil 包裹

null

ArrayList in Java

插图:

图片[2]-Java中的ArrayList-yiteyi-C++库

例子: 下面的实现演示了如何创建和使用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深度 .请看下图:

ArrayList-in-Java-In-Depth-Study

在上图中, 摘要列表 , CopyOnWriteArrayList ,以及 摘要顺序表 是实现列表接口的类。上述每个类中都实现了单独的功能。他们是:

  1. 摘要列表: 这个类用于实现一个不可修改的列表,对于这个列表,只需要扩展这个AbstractList类并实现 得到() 还有 大小() 方法。
  2. CopyOnWriteArrayList: 此类实现列表接口。它是的增强版 ArrayList 所有修改(添加、设置、删除等)都是通过制作列表的新副本来实现的。
  3. 摘要顺序列表: 这个类实现了 收集接口 还有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

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享