在本文中,我将介绍 linkedlist 类的一些特征,我还将对其操作进行一些解释,并在IT和 arrayList 类之间进行一些比较。
如果您想进一步了解 arraylist 课程,我写了一篇关于此主题的文章,您可以通过单击aqui进行咨询。
Java LinkedList类如何工作?
就像 arrayList 一样, linkedlist 类也实现了接口 list 。请参阅下面的界面和类的层次结构。完整线表示扩展和虚线实施:
因此, arraylist 也可以使用相同的妈妈,也可以用于 linkedlist ,但以不同的方式实施。
以与使用内部数组的ArrayList类不同的方式, linkedlist 类可与 double -double -chained List 一起使用。它的操作如下:列表的每个元素都存储在一个平底锅中,每个都没有指针,一个左,一个右侧。这些指针保持了前一个和后部数的位置。
以下图像说明了它是多个 linkedlist :
的方式下一个图像显示了双重列表的操作,其中每个数字指向前元和后元素。请注意,第一个没有前一个元素的位置( null )。就像最后一个元素没有下一个位置一样。
因此,与ArrayList不同,该列表在 linkedlist 中不同,元素散布在成员中,但是每个人都知道谁是您的前任及其继任者,其继任者通过使它们之间的连接的指针。
因此,在 linkedlist 中添加或删除元素比 arraylist 更粗鲁。这是因为在链式列表中,这不是添加和删除的每个操作的后元素的位移,只是更改指针的参考,表明谁成为了以前的元素,后来又变成了。。添加到LinkedList的元素如何工作?
作为一个例子,假设我们有一个linkedlist,每个数字存储以下名称:
让我们添加一个新元素,其中包含'rafael的名称ândice 1,其中包含pedro的名称,并指向玛丽亚(àdice2):
>请注意,只需要更改数字的注释:
- 佩德罗(Pedroâ)以前指向玛丽亚(Mariaâ),现在指向拉斐尔(Rafael)。
- 玛丽亚(Mariaâ)曾经指出佩德罗(Pedroâ)是他的前任,现在指向拉斐尔(Rafaelâ)。
- 拉斐尔现在已成为2的元素,指向佩德罗(Pedroâ)作为其前任,玛丽亚(Maria)为继任者。
- 玛丽亚(Mariaâ)曾经是âdice2的元素,现在成为美。
元素删除如何在LinkedList上工作?
使用下面的列表,让我们删除包含名称的项目:
列表apo³s删除:
请参阅现在的拉斐尔,反之亦然。拉斐尔现在拥有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的妈妈。此外,我们已经看到了哪个时间最好使用一个或另一个。 我希望我有所帮助,并在下一个!
最终考虑