La diferencia entre ArrayList y LinkedList en Java

Mohammad Irfan 12 octubre 2023
  1. Ejemplo de ArrayList en Java
  2. Ejemplo de LinkedList en Java
La diferencia entre ArrayList y LinkedList en Java

Este tutorial presenta cómo inicializar char y el valor inicial del tipo char en Java.

En Java, ArrayList y LinkedList son las dos clases que implementan la interfaz List. ArrayList es la implementación de matriz redimensionable de la interfaz List, mientras que LinkedList es la implementación de lista doblemente enlazada de la interfaz List en Java.

ArrayList y LinkedList se utilizan para almacenar datos, pero tienen varias diferencias debido al tipo de implementación. En este artículo, repasaremos algunas diferencias importantes entre estos con ejemplos.

Operación ArrayList LinkedList
Agregar elemento Tómate más tiempo Tómate menos tiempo
Acceso a elemento Tómate menos tiempo Tómate más tiempo
Eliminar elemento Tómate más tiempo Tómate menos tiempo
Elementos iterativos Tómate menos tiempo Tómate más tiempo
Elemento de búsqueda Tómate menos tiempo Tómate más tiempo
  • Problemas de rendimiento con LinkedList

Utiliza muchos objetos de memoria pequeños que son perjudiciales para la localidad de caché y crean problemas de rendimiento en todo el proceso.

Si bien LinkedList es rápido para agregar y eliminar elementos, es muy lento si accedemos a un elemento específico. En contraste, ArrayList es rápido para acceder a un elemento específico pero lento si agregamos y muy lento si eliminamos elementos del medio.

Ejemplo de ArrayList en Java

En este ejemplo, creamos una ArrayList y aplicamos varias operaciones como agregar, eliminar y acceder a elementos. Medimos el tiempo mientras realizamos operaciones para poder comprender la diferencia de rendimiento entre ArrayList y LinkedList. Vea el ejemplo a continuación.

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);
  }
}

Producción :

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

Ejemplo de LinkedList en Java

En este ejemplo, creamos una LinkedList y aplicamos varias operaciones como agregar, eliminar y acceder a elementos. También medimos el tiempo mientras realizamos operaciones para que podamos comprender la diferencia de rendimiento entre ArrayList y LinkedList. Vea el ejemplo a continuación.

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);
  }
}

Producción :

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

Artículo relacionado - Java ArrayList

Artículo relacionado - Java LinkedList