知道Java LinkedList课程
#初学者 #编程 #java #linkedlist

在本文中,我将介绍 linkedlist 类的一些特征,我还将对其操作进行一些解释,并在IT和 arrayList 类之间进行一些比较。

如果您想进一步了解 arraylist 课程,我写了一篇关于此主题的文章,您可以通过单击aqui进行咨询。

Java LinkedList类如何工作?

就像 arrayList 一样, linkedlist 类也实现了接口 list 。请参阅下面的界面和类的层次结构。完整线表示扩展和虚线实施

Image description

因此, arraylist 也可以使用相同的妈妈,也可以用于 linkedlist ,但以不同的方式实施。

以与使用内部数组的ArrayList类不同的方式, linkedlist 类可与 double -double -chained List 一起使用。它的操作如下:列表的每个元素都存储在一个平底锅中,每个都没有指针,一个左,一个右侧。这些指针保持了前一个和后部数的位置。

以下图像说明了它是多个 linkedlist

的方式

Image description

下一个图像显示了双重列表的操作,其中每个数字指向前元和后元素。请注意,第一个没有前一个元素的位置( null )。就像最后一个元素没有下一个位置一样。

Image description

因此,与ArrayList不同,该列表在 linkedlist 中不同,元素散布在成员中,但是每个人都知道谁是您的前任及其继任者,其继任者通过使它们之间的连接的指针。

因此,在 linkedlist 中添加或删除元素比 arraylist 更粗鲁。这是因为在链式列表中,这不是添加和删除的每个操作的后元素的位移,只是更改指针的参考,表明谁成为了以前的元素,后来又变成了。

添加到LinkedList的元素如何工作?

作为一个例子,假设我们有一个linkedlist,每个数字存储以下名称:

Image description

让我们添加一个新元素,其中包含'rafael的名称ândice 1,其中包含pedro的名称,并指向玛丽亚(àdice2):

>

Image description

请注意,只需要更改数字的注释:

  • 佩德罗(Pedroâ)以前指向玛丽亚(Mariaâ),现在指向拉斐尔(Rafael)。
  • 玛丽亚(Mariaâ)曾经指出佩德罗(Pedroâ)是他的前任,现在指向拉斐尔(Rafaelâ)。
  • 拉斐尔现在已成为2的元素,指向佩德罗(Pedroâ)作为其前任,玛丽亚(Maria)为继任者。
  • 玛丽亚(Mariaâ)曾经是âdice2的元素,现在成为美。

元素删除如何在LinkedList上工作?

使用下面的列表,让我们删除包含名称的项目:

Image description

列表apo³s删除:

Image description

请参阅现在的拉斐尔,反之亦然。拉斐尔现在拥有2欧元的1欧元和â欧元。

不同的方面不同的arraylist linkedList

在这里,我们看到您添加了两者,并且删除元素是 linkedlist 的任务,其性能比 arrayList 更有效。但是, linkedlist 在列表中访问元素的较慢。例如,如果我们想访问位置10,我们将不得不从内在到我们想要的位置。

另一点与 arraylist 不同于 linkedlist 是,在这方面,当我们启动时,不可能通过parano在构建器中传递帕拉诺的初始容量。由于 linkedlist 基于链式列表模型,因此在插入项目之前,不会分配内存中的空间,并且其初始容量为零。

但是,以及在 arraylist 中,我们可以从另一个现有的列表中创建一个列表,该列表通过构建器的一部分传递基本列表。示例:

LinkedList<String> lista = new LinkedList<>();
lista.add("Maria");
lista.add("Pedro");
LinkedList<String> novaLista = new LinkedList<>(lista);
System.out.println(novaLista);

启动linkedlist的方法

以及 arraylist ,我们可以使用多态性并声明接口的饮食 list
并实例化 linkedlist
class class class

List<String> lista = new LinkedList<>();

但是,如果我们想使用 linkedlist 的谱图,我们必须声明自己的linkedlist类的参考:

LinkedList<String> lista = new LinkedList<>();

母亲©所有LinkedList的观点

列表接口的替代方案,例如 add(item),删除(位置),set(位置,项目),get(位置O)等。我们还有一些特定的妈妈,即LinkedList类实现界面 Deque 。接下来列出了其中一些:

  • addfrimst(item) - >在列表中的价格添加一个元素;
  • addlast(item) - >在列表末尾添加元素;
  • getfirst() - >返回列表的第一个元素;
  • getlast() - >返回列表的最后一个元素;
  • removefirst() - >从列表中删除第一个元素并返回;
  • removelast() - >从列表中删除最后一个元素并返回;

如何使用linkedlist的示例

这个第一个示例等于我在我写的有关ArrayList的文章中插入了另一个示例。我还在本文中表明,我们可以使用适合 arraylist 的相同妈妈,因为两者都实现了接口 list

import java.util.Iterator;
import java.util.LinkedList;

public class TesteLinkedList {
    public static void main(String[] args) {

        // 1) Primeiro, vamos instanciar uma LinkedList;
        LinkedList<String> cidades = new LinkedList<>();

        // 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++;
        }
    }
}

saãda:

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

在第二个示例中,我们将使用 linkedlist 的某些观点:

import java.util.Iterator;
import java.util.LinkedList;

public class TesteLinkedListMetodosEspecificos {
    public static void main(String[] args) {

        // 1) Primeiro, vamos instanciar uma LinkedList;
        LinkedList<String> nomes = new LinkedList<>();

        // 2) Depois, vamos adicionar quatro nomes
        // usando o método add(item);
        nomes.add("Ana");
        nomes.add("Pedro");
        nomes.add("Maria");
        nomes.add("João");

        // 3) Com o método addFirst(item) vamos
        // adicionar Marcelo no início da lista
        nomes.addFirst("Marcelo");

        // 4) Com o método addLast(item) vamos
        // adicionar Bruna no final da lista
        nomes.addLast("Bruna");

        // 5) Vamos percorrer a lista usando for-each;
        System.out.println("Percorrendo a lista usando for-each:");
        int i = 0;
        for(String nome : nomes){
            System.out.println("Posição " + i + " - " + nome);
            i++;
        }

        System.out.println("==================");

        // 6) Usando o método getFirst(),
        // vamos retornar o primeiro elemento da lista
        System.out.println("Primeiro elemento: " + nomes.getFirst());

        // 8) Usando o método getLast(),
        // vamos retornar o último elemento da lista
        System.out.println("Último elemento: " + nomes.getLast());

        // 9) Com o método removeFirst() vamos remover
        // o primeiro elemento da lista
        nomes.removeFirst();

        // 10) Com o método removeLast() vamos remover
        // o último elemento da lista
        nomes.removeLast();

        // 11) vamos percorrer a lista novamente
        System.out.println("==================");
        System.out.println("Percorrendo a lista usando Iterator:");
        i = 0;
        Iterator<String> iterator = nomes.iterator();
        while (iterator.hasNext()){
            System.out.println("Posição " + i + " - " + iterator.next());
            i++;
        }
    }
}

saãda:

Percorrendo a lista usando for-each:
Posição 0 - Marcelo
Posição 1 - Ana
Posição 2 - Pedro
Posição 3 - Maria
Posição 4 - João
Posição 5 - Bruna
==================
Primeiro elemento: Marcelo
Último elemento: Bruna
==================
Percorrendo a lista usando Iterator:
Posição 0 - Ana
Posição 1 - Pedro
Posição 2 - Maria
Posição 3 - João

何时使用arraylist以及何时使用linkedlist?

如果您要与频率操作一起使用以从列表中添加和删除元素,则最好使用 linkedlist ,因为正如我们所看到的,此类可以以更高的效率执行这些操作其中的arraylist类。

现在,如果您需要从列表中访问元素的频率更高,那么最佳选择是使用 arrayList < /strong>类,因为它比linkedlist类更烦恼。 /p>

最终考虑

在本文中介绍了LinkedList类的操作,并且该类别和阵列列表之间的主要区别已被解决。我们还看到,我们可以使用相同的Arraylist妈妈,已经实现了列表接口,并且我们知道还有一些Lykedlist的妈妈。此外,我们已经看到了哪个时间最好使用一个或另一个。

我希望我有所帮助,并在下一个!