1.ArrayList

今天我们将探索这个ArrayList类。这是称为集合的几个类中的第一个。在 Java 中,集合是一个广泛而有用的主题,以至于整个 CodeGym 任务都专门针对它们。

要完全理解集合的结构及其所有细微差别,您需要首先学习 OOP、接口、继承、多线程基础知识等等。

所以今天我们将熟悉最简单的集合。但是在足够深的层次上,您可以了解如何使用它以及它是如何工作的。现在,见见ArrayList收藏

背景故事

我将从一些背景开始。程序员真的不喜欢数组的一个方面:它们的大小不能改变这一事实。如果你需要在数组中存储三个以上的元素,但只有一个空单元格怎么办?

解决数组空间限制的唯一方法是创建一个非常大的数组,以容纳您可能需要存储的所有元素。但这通常是在浪费内存。如果一个数组通常包含两个或三个元素,但即使有很小的机会需要存储 100 个元素,那么就有必要创建一个容量可存储 100 个的数组。

那么程序员想出了什么呢?他们写了这个ArrayList类,它做与类相同的工作Array,但可以调整大小。

数组列表类

类名ArrayList由两个词组成:Array + List。Array是一个数组,List是一个列表。

每个ArrayList对象都包含一个普通的元素数组。当您从 中读取元素时ArrayList,该对​​象会从其内部数组中检索它们。当您写入元素时,它会将它们写入内部数组。

ArrayList 类没有数组的所有缺点。它知道如何:

  • 存储特定类型的元素
  • 动态调整列表大小
  • 将元素添加到列表的末尾
  • 在列表的开头或中间插入元素
  • 从列表中的任何位置删除元素

有关更多详细信息,请参见下文:


2.创建ArrayList对象

要创建一个ArrayList对象,您需要编写如下代码:

ArrayList<TypeParameter> name = new ArrayList<TypeParameter>();

其中ArrayList是集合类型/类,TypeParameter是集合中存储的元素的类型ArrayListname是变量的名称ArrayList<TypeParameter>

name变量具有通用类型。它由两种类型组成:首先表示集合的类型,然后用尖括号表示集合中存储的元素的类型。

例子:

代码 描述
ArrayList<Integer> list = new ArrayList<Integer>();
整数列表
ArrayList<String> list = new ArrayList<String>();
字符串列表
ArrayList<Double> list = new ArrayList<Double>();
实数列表

与数组不同,集合不能存储原始类型,只能存储引用类型。因此,如果您需要 s 的集合int,请改用Integer包装类。


3.操作与ArrayList

最初,新创建的列表的长度为零,因为它包含 0 个元素。如果向列表中添加一个元素,则其长度会增加 1。如果删除添加的元素,则长度会减回零。

下表可以教你更多关于类的方法ArrayList

方法 描述
void add(Type value)
将传递的元素添加到列表中
void add(int index, Type value)
将元素添加到列表中的特定位置。
Type get(int index)
返回索引为的元素index
void set(int index, Type value)
分配value给索引为的元素index
Type remove(int index)
移除索引为 的元素index。返回删除的元素。
Type remove(Type value)
移除传递给方法的元素。如果有多个这样的元素,第一个将被删除。
void clear()
清除列表,即从列表中删除所有元素。
boolean contains(Type value)
检查列表是否包含value.
boolean isEmpty()
检查列表是否为空。换句话说,列表的长度是否为零。
int size()
返回列表的大小,即列表中元素的数量。
Type[] toArray(Type[] array)
返回包含列表元素的数组。
您需要将数组传递给方法。

这些方法几乎可以让您对列表做任何您想做的事情:交换元素、添加元素和删除元素。您可以使用单个命令清除列表,甚至可以将列表转换为数组。



ArrayList4.和的比较Array

我不认为我们可以避免比较ArrayList和数组。

您只能对数组执行 4 个操作:

  • 创建数组
  • 通过索引获取元素
  • 通过索引设置元素
  • 获取数组的长度

以下是应用于数组的这些操作ArrayList

大批 数组列表
String[] array = new String[10];
ArrayList<String> list = new  ArrayList<String>();
String s = array[0];
String s = list.get(0);
array[0] = "Bye";
list.set(0, "Bye");
int count = array.length;
int count = list.size();

让我们比较一下 anArrayList和 array 的工作方式。比如我们来实现这个任务:“从键盘读取10个字符串,并以倒序显示在屏幕上”

使用数组 使用数组列表
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
String[] list = new String[10];

for (int i = 0; i < list.length; i++)
{
    String s = console.nextLine();
    list[i] = s;
}

// Display the contents of the array on the screen
for (int i = 0; i < list.length; i++)
{
    int j = list.length - i - 1;
    System.out.println(list[j]);
}
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
ArrayList<String> list = new ArrayList<String>();

for (int i = 0; i < 10; i++)
{
    String s = console.nextLine();
    list.add(s);
}

// Display the contents of the collection on the screen
for (int i = 0; i < list.size(); i++)
{
    int j = list.size() - i - 1;
    System.out.println(list.get(j));
}

这个比喻很清楚。对于数组,一切都以某种方式更短更清晰。但ArrayList也不难:要获取一个元素,我们使用get()方法;改变一个元素,set()方法;获取列表的长度,size()方法。

那么为什么程序员要使用ArrayList类呢?

当然,重点是普通数组没有的所有其他方法:

  • 向列表中添加一个元素
  • 在列表中间添加一个元素
  • 在列表中查找一个元素
  • 从列表中删除元素