Estructuras de datos en Java

Diferencias entre diferentes estructuras de datos en Java

LinkedList

Es una lista enlazada de Recipientes (nodos) donde cada uno contiene elementos (objetos, otras listas, etc) y uno o dos punteros hacia posiciones de memoria que apuntan al anterior o siguiente nodo.

Útil cuando se quiere insertar o eliminar elementos al principio o al final de la lista. No permite acceder a un elemento en concreto de la lista directamente sin recorrer antes los anteriores.

ArrayList

Es una estructura de datos de tipo Array dinámica. A diferencia de los arrays clásicos (arrays estáticos), un ArrayList permite aumentar el tamaño del vector indefinidamente (hasta lo que la memoria permita) y agregar o quitar elementos.

A diferencia de la LinkedList, la ArrayList permite acceder a cualquier elemento de la lista directamente mediante su índice, lo que la hace especialmente adecuada para búsquedas rápidas.

HashSet

Un HashSet es una estructura de datos que contiene un conjunto de objetos. Permite buscar un objeto dentro del conjunto de forma rápida y fácil. Internamente gestiona un array y guarda los objetos utilizando un índice calculado con un código hash del objeto.

  • Los elementos de un HashSet no están ordenados
  • Para añadir un elemento al HashSet se utiliza el método add(Object obj).
  • Para borrar un elemento se utiliza remove(Object obj).
  • Para borrar todos los elementos se utiliza clear().
  • El tamaño del HashSet se puede obtener con la función size()

HashMap

Un HashMap permite guardar elementos, donde cada elemento es un par clave/valor. A diferencia de un array simple donde se guarda el valor en un índice en concreto, un HashMap determina el índice él mismo basándose en el valor hash (hashcode) generado a partir de la clave.

TreeSet

Un TreeSet mantiene los objetos ordenados en lo que se conoce como un red-black tree, es decir, en un árbol binario balanceado (cada padre tiene como máximo 2 hijos, y cuando se inserta una entrada se autobalancea de forma que quede un árbol binario simétrico).

Un TreeSet permite hacer búsquedas rápidas. No tanto como un HashMap, pero el TreeSet tiene la ventaja de estar ordenado por clave.

Ejemplo de Colecciones

import java.util.*;

public class Colecciones {
  public static void main(String[] args) {
    List lista1 = new LinkedList();
    lista1.add("elemento1");
    lista1.add("elemento2");
    lista1.add("elemento3");
    mostrar_elementos(lista1);
    List lista2 = new ArrayList();
    lista2.add("elemento1");
    lista2.add("elemento2");
    lista2.add("elemento3");
    mostrar_elementos(lista2);
    Set conjunto1 = new HashSet();
    conjunto1.add("elemento1");
    conjunto1.add("elemento2");
    conjunto1.add("elemento3");
    mostrar_elementos(conjunto1);
    SortedSet conjunto2 = new TreeSet();
    conjunto2.add("elemento1");
    conjunto2.add("elemento2");
    conjunto2.add("elemento3");
    mostrar_elementos(conjunto2);
    Map mapa1 = new HashMap();
    mapa1.put("clave1", "elemento1");
    mapa1.put("clave2", "elemento2");
    mapa1.put("clave3", "elemento3");
    mostrar_elementos(mapa1.keySet());
    mostrar_elementos(mapa1.values());
    SortedMap mapa2 = new TreeMap();
    mapa2.put("clave1", "elemento1");
    mapa2.put("clave2", "elemento2");
    mapa2.put("clave3", "elemento3");
    mostrar_elementos(mapa2.keySet());
    mostrar_elementos(mapa2.values());
  }

  static void mostrar_elementos(Collection coleccion) {
    Iterator iterador = coleccion.iterator();
    while (iterador.hasNext()) {
      String elemento = (String) iterador.next();
      System.out.print(elemento + " ");
    }
    System.out.println();
  }
}

Fuente del código: Java2s