> ## Documentation Index
> Fetch the complete documentation index at: https://apuntes.simulab.es/llms.txt
> Use this file to discover all available pages before exploring further.

# Estructuras de datos en Java: temas, ideas clave y simuladores

> Estructuras de datos en Java: ArrayList y lista enlazada, tablas hash con sondeo y encadenamiento, y árboles binarios enhebrados, paso a paso.

Las colecciones de Java (`ArrayList`, `LinkedList`, `HashMap`…) ocultan su implementación detrás de una interfaz común, pero por dentro son muy distintas y eso cambia el coste de cada operación. Ver cómo están hechas ayuda a elegir la adecuada y a implementar las propias.

## Las ideas clave del bloque

### Listas

* **ArrayList**: array contiguo. `get(i)` en $O(1)$; insertar o borrar en medio, $O(n)$. Al llenarse se duplica: añadir al final es $O(1)$ amortizado.
* **Lista enlazada**: nodos con referencias. Insertar al principio en $O(1)$; acceder por índice, $O(n)$.

### Tablas hash

La función hash calcula la posición de cada elemento: búsqueda en $O(1)$ de media. Las colisiones se resuelven con **sondeo** (tabla cerrada, con marcas de borrado) o con **listas** (tabla abierta). El factor de carga decide cuándo redimensionar.

### Árboles enhebrados

Los $n + 1$ enlaces vacíos de un árbol binario se reutilizan como hilos al sucesor y al predecesor en inorden: el recorrido no necesita pila ni recursión.

## Orden recomendado

<Steps>
  <Step title="ArrayList y lista enlazada">
    Las dos listas en Java paso a paso: capacidad, desplazamientos, recorrido de nodos y coste.
  </Step>

  <Step title="Tablas hash">
    Inserta, busca y borra en una tabla hash cerrada o abierta y mira cada sondeo.
  </Step>

  <Step title="Árbol binario enhebrado">
    Hilos al sucesor y al predecesor en inorden, y recorrido del árbol en Java sin recursión ni pila.
  </Step>
</Steps>

## Temas de este bloque

<CardGroup cols={2}>
  <Card title="ArrayList y lista enlazada" href="/programacion/java/listas">
    ArrayList frente a lista enlazada en Java paso a paso: array contiguo con capacidad y redimensionado, nodos enlazados, coste de get, add y remove, coste amortizado y cuándo usar cada una.
  </Card>

  <Card title="Tablas hash" href="/programacion/java/tablas-hash">
    Tablas hash en Java paso a paso: función hash, colisiones, tabla cerrada con sondeo lineal y cuadrático, tabla abierta con listas, borrado con marcas, factor de carga y redimensionado.
  </Card>

  <Card title="Árbol binario enhebrado" href="/programacion/java/arbol-enhebrado">
    Qué es un árbol binario enhebrado: hilos al sucesor y al predecesor en inorden, marcas de hilo, recorrido en inorden e inorden inverso sin recursión ni pila, con código Java.
  </Card>
</CardGroup>

## Simuladores de estructuras de datos en Java en Simulab

<CardGroup cols={2}>
  <Card title="ArrayList y lista enlazada" icon="flask" href="https://simulab.es/programacion/listas">
    Las dos listas en Java paso a paso: capacidad, desplazamientos, recorrido de nodos y coste.
  </Card>

  <Card title="Tablas hash" icon="flask" href="https://simulab.es/programacion/tablas-hash">
    Inserta, busca y borra en una tabla hash cerrada o abierta y mira cada sondeo.
  </Card>

  <Card title="Árbol binario enhebrado" icon="flask" href="https://simulab.es/programacion/arbol-enhebrado">
    Hilos al sucesor y al predecesor en inorden, y recorrido del árbol en Java sin recursión ni pila.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.