Cabe recalcar esto fue gracias a ChatGPT quien dio los cuadros.
Sientase libre de sugerir o agregar cambios a estas caracteristicas.
Colecciones:
| 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 |
| 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 |
| 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 |
Sí | Sí | No en clave, sí en valores | No | Sí (claves y valores) | No | Sí | 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 |