Skip to content

Instantly share code, notes, and snippets.

@jonakls
Last active September 12, 2024 15:45
Show Gist options
  • Select an option

  • Save jonakls/ed801b5421ad20c34d56bccb46771acb to your computer and use it in GitHub Desktop.

Select an option

Save jonakls/ed801b5421ad20c34d56bccb46771acb to your computer and use it in GitHub Desktop.
Cuadros comparativos sencillos con las caracteristicas de las collections de java

Colecciónes en java

Cabe recalcar esto fue gracias a ChatGPT quien dio los cuadros.

Sientase libre de sugerir o agregar cambios a estas caracteristicas.

Colecciones:

Lista

Característica ArrayList LinkedList Vector Stack CopyOnWriteArrayList
Estructura interna Basado en un array dinámico Lista doblemente enlazada Basado en un array dinámico, sincronizado Basado en Vector Basado en un array dinámico, copiado en cada modificación
Rendimiento de acceso (O(1)) acceso por índice (O(n)) acceso por índice (O(1)) acceso por índice (O(1)) acceso por índice (O(1)) acceso por índice
Rendimiento de inserción/eliminación (O(n)) al agregar/eliminar en el medio (O(1)) al insertar/eliminar en extremos (O(n)) al agregar/eliminar en el medio (O(n)) al agregar/eliminar en el medio (O(n)) para agregar/eliminar (copia en escritura)
Concurrencia No es seguro para hilos No es seguro para hilos Seguro para hilos (sincronizado) Seguro para hilos (heredado de Vector) Seguro para hilos
Uso de memoria Menor uso de memoria (compacto) Mayor uso de memoria por nodos enlazados Mayor uso de memoria (debido a sincronización) Mayor uso de memoria (por Vector y métodos de Stack) Mayor uso de memoria por copias al modificar
Sincronización No está sincronizado No está sincronizado Está sincronizado internamente Está sincronizado internamente Está sincronizado internamente
Rendimiento en iteraciones Rápido, debido a su array interno Más lento en iteración debido a nodos enlazados Rápido, pero con sobrecarga por sincronización Rápido, pero con sobrecarga por sincronización Rápido en lectura, pero con sobrecarga por copiar al escribir
Principal ventaja Acceso rápido y eficiente por índice Inserción/eliminación rápida en los extremos Sincronización automática (aunque lenta) Implementa operaciones de pila (LIFO) Lectura concurrente segura y eficiente
Cuándo usarlo Si necesitas acceso rápido por índice Si necesitas muchas inserciones/eliminaciones en los extremos Si necesitas una lista sincronizada (poco usada hoy) Si necesitas una pila sincronizada Si hay muchas lecturas y pocas modificaciones

Set

Característica HashSet TreeSet LinkedHashSet ConcurrentSkipListSet CopyOnWriteArraySet
Orden No garantiza orden Orden natural (o definido por comparador) Mantiene el orden de inserción Orden natural (o definido por comparador) Mantiene el orden de inserción
Estructura interna Basado en HashMap Basado en un árbol rojo-negro (TreeMap) Basado en HashMap con lista enlazada Basado en un skip list concurrente Basado en una matriz que se copia al modificar
Rendimiento Operaciones en (O(1)) Operaciones en (O(\log n)) Operaciones en (O(1)), pero más lento que HashSet Operaciones en (O(\log n)), con concurrencia Operaciones en (O(n)) para agregar o eliminar
Concurrencia No es seguro para hilos No es seguro para hilos No es seguro para hilos Seguro para hilos Seguro para hilos
Uso de memoria Menor uso de memoria Mayor uso de memoria por estructura de árbol Mayor uso de memoria por lista enlazada Mayor uso de memoria por estructura concurrente Mayor uso de memoria por matriz copiada
Principal ventaja Alta eficiencia en operaciones básicas Conjunto ordenado de elementos Mantiene el orden de inserción Concurrencia segura con buen rendimiento Excelente para escenarios de lectura intensa, pocas modificaciones
Cuándo usarlo Si no importa el orden y se busca rendimiento Si necesitas un conjunto ordenado Si necesitas preservar el orden de inserción Si necesitas concurrencia con orden natural Si hay muchas lecturas y pocas escrituras

Maps

Característica HashMap LinkedHashMap ConcurrentHashMap Hashtable IdentityHashMap TreeMap WeakHashMap EnumMap
Orden No garantiza orden Mantiene el orden de inserción No garantiza orden No garantiza orden Basado en la identidad del objeto Orden natural (o definido por comparador) No garantiza orden Orden basado en la definición de la enumeración
Estructura interna Basado en HashTable con HashMap HashMap con lista doblemente enlazada Segmentos de HashMap para concurrencia Basado en HashTable sincronizado Basado en HashTable con referencia a la identidad Árbol rojo-negro (TreeMap) Basado en HashMap, usa referencias débiles para claves Basado en un array interno optimizado para enum
Rendimiento Operaciones en (O(1)) Operaciones en (O(1)), más lento que HashMap Operaciones en (O(1)) con concurrencia Operaciones en (O(1)), más lento por sincronización Operaciones en (O(1)), más lento por la comparación de identidad Operaciones en (O(\log n)) Operaciones en (O(1)), pero con recolección de basura Operaciones en (O(1)) altamente optimizado para enum
Concurrencia No es seguro para hilos No es seguro para hilos Seguro para hilos sin necesidad de sincronización externa Seguro para hilos con bloqueo sincronizado No es seguro para hilos No es seguro para hilos No es seguro para hilos No es seguro para hilos
Uso de memoria Uso eficiente de memoria Mayor uso de memoria por la lista enlazada Uso eficiente, pero con algo más de memoria por concurrencia Mayor uso de memoria por sincronización Uso eficiente, pero con más memoria por la comparación de identidad Mayor uso de memoria por estructura de árbol Similar a HashMap, pero con referencias débiles Uso eficiente, altamente optimizado para enum
Permite null en clave/valor No en clave, sí en valores No Sí (claves y valores) No No (las claves deben ser enum)
Sincronización No está sincronizado No está sincronizado Está sincronizado internamente Está sincronizado internamente No está sincronizado No está sincronizado No está sincronizado No está sincronizado
Principal ventaja Alta eficiencia en operaciones básicas Orden de inserción garantizado Concurrencia segura con alto rendimiento Seguridad para hilos heredada (obsoleta) Comparación de identidad (claves únicas por referencia) Conjunto ordenado de claves Soporte para la recolección de basura en claves Altamente optimizado para trabajar con claves de tipo enum
Cuándo usarlo Si no te importa el orden y quieres rendimiento Si necesitas mantener el orden de inserción Si necesitas concurrencia con buen rendimiento Si necesitas sincronización explícita, pero es una implementación obsoleta Si necesitas claves únicas basadas en identidad, no en igualdad Si necesitas un mapa ordenado Si necesitas que las claves sean recolectadas por el GC cuando no hay referencias Cuando las claves son enum y buscas rendimiento optimizado
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment