在本文中,我将介绍Java arraylist 类的一些特征,并演示使用一些最常用的妈妈。
为什么要使用arraylist类?
当我们使用Java标准数组时,我们需要确定其创建时的大小将是什么。这个大小是固定的,一旦创建,我们就无法更改元素数量。例如,如果我们需要添加一个元素,则有必要创建一个新数组并复制新数组中的所有元素。这种做法最终非常费力,也会导致表现丧失。
ArrayList类精确地解决了此问题,因为它允许您创建DINATIC数组,即如果需要添加另一个元素,则ArrayList在汽车中进行调整。
arraylist类层次结构
arraylist 类是 java collections 的一部分,属于 java.util package。 ArrayList是 list 接口的实现,进而扩展了 Collection 接口。在下图中,完整的线表示扩展了 实现â:
除了收藏的继承外,列表接口还提供了所有允许基于其所在位置(或ãndice)的元素处理的所有内容。与向量一样,离子开始为零。
一些主要妈妈
- add(item) - >在阵列列表中添加一个新元素。该元素插入列表的末尾;
- add(位置,项目) - >插入列表的特定位置;
- 删除(位置) - >从列表中的给定位置删除元素;
- set(位置,项目) - >在特定位置替换元素;
- 获取(位置) - >返回指定的位置元素;
- 索引(item) - >返回指定元素的第一次出现的位置;
- 包含(item) - >如果列表包含指定元素,则返回true。如果您返回,则返回false;
- clear() - >从列表中删除所有元素;
- iSeptty() - >如果列表为空,则返回true。如果Contrário返回false;
- size() - >返回列表中的元素数量。
初始化阵列列表的方法
我们可以初始化阵列列表,而无需指定列表所包含的元素类型,如下所示:
ArrayList lista = new ArrayList();
这种格式允许我们将任何类型的元素添加到列表中。在下面的示例中,请注意,插入数据的类型混合了:
import java.util.ArrayList;
public class TesteArrayList {
public static void main(String[] args) {
ArrayList lista = new ArrayList();
lista.add("Ana");
lista.add(123);
lista.add("Maria");
lista.add(12.34);
lista.add("Paulo");
System.out.println(lista);
}
}
saãda:
[Ana, 123, Maria, 12.34, Paulo]
例如,如果我们需要将特定位置的元素存储在差异中,则有必要进行 类型cast ,指示对象的类型。在下面的示例中,我们试图将位置元素1 在字符串名称上上存储,但是该元素是整数值(123),它过度导致 运行时间 在执行时。
import java.util.ArrayList;
public class TesteArrayList {
public static void main(String[] args) {
ArrayList lista = new ArrayList();
lista.add("Ana");
lista.add(123);
lista.add("Maria");
lista.add(12.34);
lista.add("Paulo");
// vai causar run time exception,
// pois o elemento da posição 1 é um inteiro(123)
String nome = (String) lista.get(1);
System.out.println(lista);
}
}
saãda:
java.lang.ClassCastException
class java.lang.Integer cannot be cast to class java.lang.String
因此,为避免问题,理想不允许阵列列表存储具有混合类型的元素。为了限制阵列列表,我们可以使用 generics ,插入列表将存储的对象类型。
obs。:没有接受原始类型。例如,要插入整数值,我们将整数用于int。
ArrayList<Integer> lista = new ArrayList<>();
请参阅一个创建整个元素列表的示例。
import java.util.ArrayList;
public class TesteArrayList {
public static void main(String[] args) {
ArrayList<Integer> lista = new ArrayList<>();
lista.add(1);
lista.add(2);
lista.add(3);
System.out.println(lista);
}
}
saãda:
[1, 2, 3]
我们还可以使用多态性并声明接口的茶点 list 并实例化 arraylist 。
class class class
List<Integer> lista = new ArrayList<>();
以这种方式声明阵列列表的优点是,我们可以随时在必要时更改实现 list list 接口的类。例如,在使用arraylist类的发明中,我们可以选择使用 linkedlist 或 vector 两者都实现 list list 接口。
List<Integer> lista = new LinkedList<>();
如果我们已经知道该数组中有多少个元素在构建器中具有每个parano的初始容量。在这些情况下,这是非常建议的,因为我们避免浪费记忆。在下面的示例中,我们将以5个位置启动阵列列表。如果有必要以后添加更多元素,则调整大小是在汽车中进行的。
List<String> lista = new ArrayList<>(5);
我们还可以从另一个现有的列表中创建一个列表。只需通过构建器中的每个parano传递基本列表:
List<String> lista = new ArrayList<>(5);
lista.add("Maria");
lista.add("Pedro");
List<String> novaLista = new ArrayList<>(lista);
如何使用arraylist的示例
在下面的示例中,将演示如何使用Arraylist类提供的一些母亲。
- 首先,让我们实例化列表;
- 然后,我们将使用整个 add(item)添加五个城市;
- 我们将使用的展示这些城市。此处用于所有 get(位置)和 size();
- 随着整个删除(位置),我们将从位置3(manaus)中删除城市;
- 使用所有添加(位置,项目),我们将在零位置添加florianã³polis;
- 让我们再次使用 for-etach ; 再次进入列表
- 现在,我们将使用索引(item)返回城市的位置,并在整个集合(位置,项目)中,我们将用recife替换 - 萨尔瓦多;
- 现在让我们再次列出列表,但是使用迭代。 (迭代器是一个项目模式,可以在集合中的元素之间进行迭代)。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TesteArrayList {
public static void main(String[] args) {
// 1) Primeiro, vamos instanciar uma lista;
List<String> cidades = new ArrayList<>();
// 2) Depois, vamos adicionar cinco cidades
// usando o método add(item);
cidades.add("São Paulo");
cidades.add("Rio de Janeiro");
cidades.add("Recife");
cidades.add("Manaus");
cidades.add("Curitiba");
// 3) Percorreremos a lista e exibiremos
// essas cidades usando o for.
// Aqui serão utilizados os métodos get(posição) e size()
System.out.println("Percorrendo a lista usando for:");
for(int i = 0; i < cidades.size(); i++){
System.out.println("Posição " + i + " - " + cidades.get(i));
}
// 4) Com o método remove(posição),
// removeremos a cidade da posição 3 (Manaus);
cidades.remove(3);
// 5) Com o método add(posição, item),
// adicionaremos a cidade “Florianópolis” na posição zero;
cidades.add(0, "Florianópolis");
// 6) Vamos percorrer novamente a lista usando for-each;
System.out.println("==================");
System.out.println("Percorrendo a lista usando for-each:");
int i = 0;
for(String cidade : cidades){
System.out.println("Posição " + i + " - " + cidade);
i++;
}
// 7) Agora usaremos o indexOf(item) para retornar
// a posição da cidade “Recife” e, com o método
// set(posição, item) substituiremos "Recife"
// por “Salvador”;
int posicaoCidade = cidades.indexOf("Recife");
cidades.set(posicaoCidade, "Salvador");
// 8) Agora vamos percorrer a lista novamente,
// mas usando Iterator.
System.out.println("==================");
System.out.println("Percorrendo a lista usando Iterator:");
i = 0;
Iterator<String> iterator = cidades.iterator();
// o método hasNext() verifica se existe
// um próximo elemento para ser iterado
while (iterator.hasNext()){
// o método next() retorna o próximo elemento
System.out.println("Posição " + i + " - " + iterator.next());
i++;
}
}
}
执行应用程序后的输出将为:
Percorrendo a lista usando for:
Posição 0 - São Paulo
Posição 1 - Rio de Janeiro
Posição 2 - Recife
Posição 3 - Manaus
Posição 4 - Curitiba
==================
Percorrendo a lista usando for-each:
Posição 0 - Florianópolis
Posição 1 - São Paulo
Posição 2 - Rio de Janeiro
Posição 3 - Recife
Posição 4 - Curitiba
==================
Percorrendo a lista usando Iterator:
Posição 0 - Florianópolis
Posição 1 - São Paulo
Posição 2 - Rio de Janeiro
Posição 3 - Salvador
Posição 4 - Curitiba
阵列列表的优势和缺点
当我们只想将元素添加到列表中以稍后进行迭代时,使用Araylist更合适。在列表末尾添加元素非常简单(如果尚未超过阵列存储容量,则此元素)。通过其离子对任何数组元件的访问也非常有效,也就是说,当我们使用整个 get(位置)时,访问Innio或中间元素的时间,或最终实际上是相同的,无论矢量的大小如何。
但是,ArrayList实际上在内部使用标准阵列,即当数组容量结束时,它需要创建一个具有更大容量的新数组,并将旧元素复制到新的元素。例如,当我们使用整个添加(位置,项目)以在Innio或向量中间添加一个元素时,首先需要将每个元素移动到右侧,从而导致所需的位置位置要释放,因此在此位置添加新项目。如果阵列太大,它可能会消耗大量内存。
在阵列的中间或开始时删除元素也可以非常纯净,因为不允许在矢量中有一个孔,因此必须将所有元素取代到左侧。
最终考虑
在本文中解决了 arraylist 的一些特征。我们已经看到该类实现列表接口,并且是 java.util 软件包的一部分。我们也知道您最常用的妈妈,并了解其操作的一些操作以及其优势和缺点。
根据上下文,也许其他实现更合适,例如 linkedlist (也实现了 list )或 hashset (实现 sep )接口。但这是附近文章的主题。