Java Arraylist类用于矢量处理
#java #数组 #arraylist #list

在本文中,我将介绍Java arraylist 类的一些特征,并演示使用一些最常用的妈妈。

为什么要使用arraylist类?

当我们使用Java标准数组时,我们需要确定其创建时的大小将是什么。这个大小是固定的,一旦创建,我们就无法更改元素数量。例如,如果我们需要添加一个元素,则有必要创建一个新数组并复制新数组中的所有元素。这种做法最终非常费力,也会导致表现丧失。

ArrayList类精确地解决了此问题,因为它允许您创建DINATIC数组,即如果需要添加另一个元素,则ArrayList在汽车中进行调整。

arraylist类层次结构

arraylist 类是 java collections 的一部分,属于 java.util package。 ArrayList是 list 接口的实现,进而扩展了 Collection 接口。在下图中,完整的线表示扩展了 实现â:

Image description

除了收藏的继承外,列表接口还提供了所有允许基于其所在位置(或ã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类提供的一些母亲。

  1. 首先,让我们实例化列表;
  2. 然后,我们将使用整个 add(item)添加五个城市;
  3. 我们将使用的展示这些城市。此处用于所有 get(位置) size();
  4. 随着整个删除(位置),我们将从位置3(manaus)中删除城市;
  5. 使用所有添加(位置,项目),我们将在零位置添加florianã³polis;
  6. 让我们再次使用 for-etach ;
  7. 再次进入列表
  8. 现在,我们将使用索引(item)返回城市的位置,并在整个集合(位置,项目)中,我们将用recife替换 - 萨尔瓦多;
  9. 现在让我们再次列出列表,但是使用迭代。 (迭代器是一个项目模式,可以在集合中的元素之间进行迭代)。
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 )接口。但这是附近文章的主题。