A diferença entre ArrayList e LinkedList em Java

Mohammad Irfan 12 outubro 2023
  1. Exemplo de ArrayList em Java
  2. Exemplo de LinkedList em Java
A diferença entre ArrayList e LinkedList em Java

Este tutorial apresenta como inicializar char e o valor inicial do tipo char em Java.

Em Java, ArrayList e LinkedList são as classes que implementam a interface List. O ArrayList é a implementação de array redimensionável da interface List, enquanto LinkedList é a implementação de lista duplamente vinculada da interface List em Java.

ArrayList e LinkedList são usados ​​para armazenar dados, mas têm várias diferenças devido ao tipo de implementação. Neste artigo, apresentaremos algumas das principais diferenças entre eles com exemplos.

Operação ArrayList LinkedList
Adicionando Elemento Tire mais tempo Demore menos
Elemento de acesso Demore menos Tire mais tempo
Removendo Elemento Tire mais tempo Demore menos
Elementos iterativos Demore menos Tire mais tempo
Elemento de pesquisa Demore menos Tire mais tempo
  • Problemas de desempenho com LinkedList

Ele usa muitos objetos de memória pequenos que são ruins para a localidade do cache e criam problemas de desempenho em todo o processo.

Embora LinkedList seja rápido para adicionar e excluir elementos, é muito lento se acessarmos um elemento específico. Em contraste, ArrayList é rápido para acessar um elemento específico, mas lento se adicionarmos e muito lento se excluirmos elementos do meio.

Exemplo de ArrayList em Java

Neste exemplo, criamos um ArrayList e aplicamos várias operações, como adicionar, remover e acessar elementos. Medimos o tempo durante a execução das operações para que possamos entender a diferença de desempenho entre ArrayList e LinkedList. Veja o exemplo abaixo.

import java.util.ArrayList;
import java.util.List;

public class SimpleTesting {
  public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    System.out.println("Adding Time : " + addElement(list, 10));
    System.out.println("Adding Time : " + addElement(list, 2));
    System.out.println(list);
    System.out.println("Accessing Time : " + accessElement(list, 1));
    System.out.println("Removing Time : " + removeElement(list, 1));
    System.out.println(list);
  }
  static long addElement(List<Integer> list, int element) {
    long starttime = System.nanoTime();
    list.add(element);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
  static long accessElement(List<Integer> list, int index) {
    long starttime = System.nanoTime();
    int el = list.get(index);
    System.out.println("Element found : " + el);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
  static long removeElement(List<Integer> list, int index) {
    long starttime = System.nanoTime();
    list.remove(index);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
}

Resultado:

Adding Time : 48556
Adding Time : 2090
[10, 2]
Element found : 2
Accessing Time : 42301
Removing Time : 6471
[10]

Exemplo de LinkedList em Java

Neste exemplo, criamos uma LinkedList e aplicamos várias operações, como adicionar, remover e acessar elementos. Também medimos o tempo durante a execução das operações para que possamos entender a diferença de desempenho entre ArrayList e LinkedList. Veja o exemplo abaixo.

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class SimpleTesting {
  public static void main(String[] args) {
    List<Integer> list = new LinkedList<Integer>();
    System.out.println("Adding Time : " + addElement(list, 10));
    System.out.println("Adding Time : " + addElement(list, 2));
    System.out.println(list);
    System.out.println("Accessing Time : " + accessElement(list, 1));
    System.out.println("Removing Time : " + removeElement(list, 1));
    System.out.println(list);
  }
  static long addElement(List<Integer> list, int element) {
    long starttime = System.nanoTime();
    list.add(element);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
  static long accessElement(List<Integer> list, int index) {
    long starttime = System.nanoTime();
    int el = list.get(index);
    System.out.println("Element found : " + el);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
  static long removeElement(List<Integer> list, int index) {
    long starttime = System.nanoTime();
    list.remove(index);
    long endtime = System.nanoTime();
    return (endtime - starttime);
  }
}

Resultado:

Adding Time : 82591
Adding Time : 4218
[10, 2]
Element found : 2
Accessing Time : 54516
Removing Time : 7572
[10]

Artigo relacionado - Java ArrayList