ProgramaciónDesarrollador Backend

¿Cómo funcionan las colecciones en Java? ¿Cuáles son las diferencias entre ArrayList, LinkedList y HashMap?

Supere entrevistas con el asistente de IA Hintsage

Respuesta.

En Java, las colecciones implementan estructuras de datos para trabajar con grupos de objetos. Las estructuras principales son:

  • ArrayList (implementa la interfaz List) almacena elementos en un arreglo, proporciona acceso rápido por índice, pero la inserción/eliminación de elementos en medio es lenta, ya que implica el desplazamiento de elementos.

  • LinkedList (también implementa List) está construida sobre una lista doblemente enlazada. Inserta/elimina elementos rápidamente en medio, pero el acceso por índice es lento, ya que debe recorrer la lista desde el principio o el final.

  • HashMap implementa la interfaz Map. Almacena pares clave-valor. El acceso rápido (O(1)) a los valores por clave se garantiza mediante una función hash, pero no garantiza el orden de los elementos.

List<String> arrayList = new ArrayList<>(); arrayList.add("A"); // rápido arrayList.get(0); // rápido List<String> linkedList = new LinkedList<>(); linkedList.add("A"); // un poco más lento linkedList.add(0, "B"); // rápido Map<String, Integer> map = new HashMap<>(); map.put("one", 1); Integer val = map.get("one"); // rápido

Pregunta capciosa.

¿Cuál es la diferencia fundamental entre HashMap y Hashtable, y por qué Hashtable prácticamente no se utiliza en el código moderno?

Respuesta: HashMap no está sincronizado, permite null tanto como clave como valor. Hashtable está sincronizado (varios hilos pueden trabajar con un mismo objeto sin comprometer la integridad), pero no permite null y es más lento. En el código moderno, se utiliza más frecuentemente ConcurrentHashMap para la seguridad de hilo, ya que es más eficiente y se configura de manera más delgada para cálculos multihilo.

Map<String, String> map1 = new HashMap<>(); map1.put(null, "value"); // OK Map<String, String> map2 = new Hashtable<>(); map2.put(null, "value"); // NullPointerException

Ejemplos de errores reales debido a la falta de conocimiento de los matices del tema.


Historia

En un sistema de seguimiento de estudiantes, se utilizó ArrayList para inserciones y eliminaciones frecuentes en medio de la lista, lo que llevó a una fuerte degradación del rendimiento con grandes volúmenes de datos. Después de cambiar a LinkedList, la situación se normalizó.


Historia

En un sistema CRM multihilo, se utilizó HashMap para almacenar datos entre hilos sin sincronización, lo que ocasionalmente resultó en datos inconsistentes y caídas debido a condiciones de carrera. Después de cambiar a ConcurrentHashMap, el error desapareció.


Historia

Un desarrollador intentó agregar una clave null en Hashtable, sin saber de la prohibición. Esto provocó un NullPointerException, y pasaron mucho tiempo tratando de encontrar por qué la aplicación se caía inesperadamente.