Las colecciones en Java permiten almacenar dinámicamente objetos y ofrecen ventajas sobre los arrays tradicionales como cambiar de tamaño. Existen diferentes tipos de colecciones como List, Set, Queue y Map para almacenar y organizar datos. Cada tipo incluye clases específicas como ArrayList, HashSet, LinkedList y HashMap que varían en su rendimiento y funcionalidad.
2. ¿Qué son y para que sirven las
colecciones?
Colección
? Almacén de
objetos,
dinámico
Ventajas con respecto a los arrays:
• Pueden cambiar de tamaño
dinámicamente.
• Pueden ir provistas de ordenamiento.
• Se pueden insertar y eliminar
elementos.
Colección
5. Listas. Clases utilizadas
ArrayList
c
LinkedList
c
Vector
c
CopyOnWriteArrayList
c
• Muy rápida
accediendo a
elementos.
• Se adapta a un
gran número
de escenarios.
• Listas
enlazadas
• Gran eficiencia
agregando y
eliminando
elementos.
• Considerada
como
colección
obsoleta.
• Utilizada
únicamente en
operaciones de
concurrencia.
• Utilizada en
programas
concurrentes.
• Eficiente en
operaciones de
lectura pero muy
poco eficiente en
operaciones de
escritura.
7. Sets. Clases utilizadas
HashSet
C
LinkedHash
Set
C
TreeSet
C
EnumSet
C
CopyOnWrite
ArraySet
C
ConcurredSkip
ListSet
C
• Rápida
• No
duplicados.
• No
ordenación.
• No acceso
aleatorio.
• Ordenación
por entrada
• Eficiente al
acceder
• No eficiente
al agregar
• Es ordenado
• Poco
eficiente
• La mejor
para tipos
enumerados
• Específico
concurrencia
• Eficiente
lectura
• Poca
eficiente
escritura
• Poco
eficiente al
eliminar
• Específico
concurrencia
• Admite
ordenación
• Con muchos
elementos
no es
eficiente.
8. Queues (Colas). Clases utilizadas
Collection
I
Queue
I
ArrayDeque
C
LinkedBlocking
Deque
C
LinkedList
C
PriorityQueue
C
PriorityBlocking
Queue
C
Ventajas
• Muy rápido al acceder al primer y
último elemento.
• Permite crear colas de elementos
muy eficientes. (LIFO/FIFO.
Inconvenientes:
• Acceso lento a los
elementos intermedios.
9. Queues (Colas). Clases utilizadas
ArrayDeque
C
LinkedBlocking
Deque
C
LinkedList
C
PriorityQueue
C
PriorityBlocking
Queue
C
• Gran eficiencia.
• La más utilizada.
• Utilizado en
programación
concurrente.
• Rendimiento
inferior al
ArrayDeque
• Para utilizar un
Comparator.
• El primer
elemento
depend
• Igual que el
anterior pero
más eficiente en
programación
concurrente.
11. Maps. Clases utilizadas
HashMap
C
LinkedHash
Map
C
TreeMap
C
EnumMap
C
WeakHashMap
C
HashTable
C
CocurrentHash
Map
C
• No
ordenación
• Eficiente
• Ordenación
por
inserción
• Permite
ordenación
por uso.
• Eficiente
lectura.
• Poca
eficiente
escritura.
• Ordenación
por clave
• Poco
eficiente en
todas sus
operaciones.
• Permite
enum
como
claves.
• Muy
eficiente.
• Utilizado
para crear
elementos
que vaya
borrando
el sistema
si no se
utilizan.
• Muy poco
eficiente.
• Considerado
obsoleto.
• Utilizado en
operaciones
de
concurrencia.
• Utilizado en
concurrencia.
• No permite
nulos.
12. Clase de Utilidades: Arrays Y
Collections
Arrays Collections
• La clase Collections también es
una clase de utilidades, de métodos
abstractos static que
implementan algoritmos aplicados a
todo tipo de colecciones.
• La clase Arrays agrupa algoritmos
útiles que se aplican, en general, a
arrays.
13. • Java incorpora la clase Arrays para disponer de métodos que trabajen con arrays
(vectores). Estos métodos implementan algoritmos de búsqueda, ordenación y
de asignación. Ejemplos:
- Ordenación de Arrays:
El método de ordenación, sort(), está sobrecargado, de tal forma que se puede
ordenar un array de cualquier tipo primitivo y , en general de tipo Object sort().
NOTA:
Para ordenar un array de objetos los
elementos deben de implementar la interfaz
Comparable
ya que el criterio de ordenación está
determinado por el método:
int compareTo(Object a);
Clase Arrays
15. Clase Arrays
• Búsqueda de una clave:
La operación de búsqueda se realiza sobre un array ordenado. La clase array
dispone del método static binarySearch() para realizar la búsqueda de un
elemento en un array.
• Asignación de un elemento:
Otra utilidad de la clase Arrays es el método fill() para asignar un elemento a
todas las posiciones de un array, o solo a un rango del array.
16.
17. Clase Collection
• Esta clase se encuentra en el paquete java.util y está diseñada para trabajar con colecciones: List, Map, Set; en
general sobre cualquier Collection. Agrupa métodos static que implementan algoritmos genéricos de ordenación,
búsqueda, máximo y mínimo. Así como para dar las características de sincronización y de solo lectura de las
colecciones. Ejemplos:
• Ordenación y búsqueda:
Se aplican a una lista cuyos elementos implementan la interfaz Comparable y que permite que se puedan
comparar mutuamente.
• Máximo y mínimo:
Los métodos max() y min() devuelven el máximo y el mínimo respectivamente, de una colección. Para que se
pueda realizar la operación, todos los elementos de implementar la interfaz Comparable y ser mutuamente
comparables.
19. Clase Collection
• Sincronización:
Para añadir la cualidad de sincronización a las colecciones, Collections dispone de métodos que se aplican a
cada tipo de colección:
• Conversión a solo lectura:
Estos métodos convierte la colección al modo sólo lectura, ya no se pueden agregar o eliminar elementos.
• Utilidades:La clase Collections dispone de métodos útiles para ciertos procesos algorítmicos.
20.
21. Comparación de Objetos: Comparable y
Comparator
• Comparable
La interfaz Comparable se utiliza para establecer un orden natural entre los
objetos de una misma clase. La declaración de la interfaz (paquete java.lang) es:
• Si compareTo() devuelve un valor negativo significa que el objeto que llama al
método es menor que el pasado en el argumento; si devuelve 0 significa que son
iguales, y si devuelve un valor positivo el objeto que llama al método es mayor
que el pasado en el argumento. Como se puede apreciar el programador de la
clase define la forma de comparar números racionales.
Integer Double String
23. Comparación de Objetos: Comparable y
Comparator
• Comparator
Hay métodos de ordenación y búsqueda de objetos que utilizan la interfaz
Comparator para determinar el orden natural entre dos elementos. Su interfaz se
encuentra en el paquete java.util. Su declaración es la siguiente.
• El método compare() relaciona dos objetos, no necesariamente del mismo tipo.
Devolverá un valor negativo si el objeto ob1 es menor que el segundo objeto,
cero si son iguales, y valor positivo si ob1 es mayor que ob2. El comportamiento
de compare() tiene que ser compatible con el resultado del método
equals(); es decir, si este devuelve true, compare() tendrá que devolver 0.
24.
25. Vector y Stack
• Vector
El comportamiento de una colección Vector se asemeja a la de un array, con la característica de que
no es necesario controlar su tamaño, ya que, si fuera necesario automáticamente dicho tamaño
aumenta.
• La plataforma Java 5 permite, también, establecer el tipo concreto de elemento que puede
guardar una colección, y en particular un vector Por ejemplo:
• Sin embargo, si la declaración es la siguiente:
27. Vector y Stack
• Stack
La clase Stack hereda el comportamiento de una colección vector y además define las operaciones del tipo
abstracto Pila (último en entrar primero en salir). Todas las operaciones se realizan por un único punto, el final
(cabeza o top) de la pila. La declaración de Stack es la siguiente:
• Los elementos que almacena una colección stack son de tipo genérico (tipo Object), esto hace necesario
realizar conversión de tipo cuando se extraen. La plataforma Java 5 permite parametrizar el tipo de los
elementos que guarda el stack, de tal forma que el compilador verifica el tipo.
28.
29. Bibliografía
• Joyanes, L., (2008). Estructuras de datos en Java. Aravaca, España: MCGRAW-
HILL/INTERAMERICANA DE ESPAÑA, S. A. U.
• [pildorasinformáticas]. (2015, Octubre 9). Curso Java. Colecciones I. Vídeo
179 [Archivo de video]. Recuperado de https://www.youtube.com/watch?v=bTu-
fz1JmWQ&t=622s
• Vindel, R. (2015-2017). Introducción a Colecciones en Java. Madrid:
AdictosAlTrabajo.com. Recuperdado de
https://www.adictosaltrabajo.com/tutoriales/introduccion-a-colecciones-en-java/