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]