0% encontró este documento útil (0 votos)
3 vistas

Introducción a Java - 07 - Collections

El documento proporciona una introducción al marco de trabajo de colecciones en Java, explicando conceptos clave como colecciones, listas, conjuntos y mapas, así como sus respectivas implementaciones y métodos. Se abordan clases y interfaces importantes como Collection, List, Set, Map, y se discuten algoritmos de colecciones y características de sincronización. Además, se incluyen detalles sobre la clase Properties y las colecciones no modificables, enfatizando la importancia de la eficiencia y la reutilización del código en la programación en Java.

Cargado por

yanniczyporuk
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas

Introducción a Java - 07 - Collections

El documento proporciona una introducción al marco de trabajo de colecciones en Java, explicando conceptos clave como colecciones, listas, conjuntos y mapas, así como sus respectivas implementaciones y métodos. Se abordan clases y interfaces importantes como Collection, List, Set, Map, y se discuten algoritmos de colecciones y características de sincronización. Además, se incluyen detalles sobre la clase Properties y las colecciones no modificables, enfatizando la importancia de la eficiencia y la reutilización del código en la programación en Java.

Cargado por

yanniczyporuk
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPT, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 61

Introducción a Java

Collections
Contenido

 ¿Qué es una colección?


 La clase Arrays
 La Interfaz Collection y clase Collections
 Listas
 Algoritmos de colecciones
 La clase Stack
 La clase PriorityQueue y la interfaz Queue
 Conjuntos
 Mapas
 La clase Properties
 Colecciones sincronizadas
 Colecciones no modificables
 Implementaciones abstractas
 Resumen
 Consultas
 Ejercicios
¿Qué es una colección?

Una colección es una estructura de datos (en realidad, un objeto) que puede guardar
referencias a otros objetos. Las interfaces del marco de trabajo de colecciones
declaran las operaciones que se deben realizar en forma genérica en varios tipos de
colecciones.

Interfaz Descripción
Collection La interfaz raíz en la jerarquía de colecciones, a partir de la
cual se derivan las interfaces Set, Queue y List.
Set Una colección que no tiene duplicados.

List Una colección ordenada que puede contener elementos


duplicados.
Map Asocia claves con valores y no puede contener claves
duplicadas.
Queue Por lo general, una colección del tipo primero en entrar,
primero en salir, que modela a una línea de espera; pueden
especificarse otros órdenes.
¿Qué es una colección?
¿Qué es una colección?

El marco de trabajo de colecciones proporciona implementaciones de alto rendimiento y


alta calidad de las estructuras de datos comunes, y permite la reutilización de
software. Estas características minimizan la cantidad de código que necesitan
escribir los programadores para crear y manipular colecciones. Las clases y las
intefaces del marco de trabajo de colecciones son miembros del paquete java.util.
La clase Arrays

La clase Arrays proporciona métodos static para manipular arreglos.

Método Descripción

sort Ordena un arreglo.

binarySearch Busca en un arreglo ordenado.

equals Compara arreglos.

fill Coloca valores en un arreglo.


La clase Arrays
La clase Arrays
La clase Arrays

Pasar un arreglo desordenado al método binarySearch es un error lógico; el valor


devuelto es indefinido.
La interfaz Collection y la clase Collections

La interfaz Collection es la interfaz raíz de la jerarquía de colecciones, a partir de la cual


se derivan las interfaces Set, Queue y List. Esta interfaz contiene operaciones
masivas (es decir, operaciones que se llevan a cabo en toda una colección) para
agregar, borrar, comparar y retener objetos (o elementos) en una colección. Un
objeto Collecion también puede convertirse en un arreglo. Además, la interfaz
Collection proporciona un método que devuelve un objeto Iterator, el cual permite a
un programa recorrer toda la colección y eliminar elementos de la misma durante la
iteración. Otros métodos de la interfaz Collection permiten a un programa
determinar el tamaño de una colección, y si esta vacía o no.

 Collection se utiliza comúnmente como un tipo de parámetro de métodos para


permitir el procesamiento polimórfico de todos los objetos que implementen a la
interfaz Collection.
 La mayoría de las implementaciones de colecciones proporcionan un constructor
que toma un argumento Collection permitiendo así que se construya una nueva
colección, la cual contiene elementos de la colección especificada.
La interfaz Collection y la clase Collections

Operaciones en una Collection

Métodos Descripción
add/addAll Agrega objetos y/o Collections
clear Vacía la colección
contains Verifica si la colección contiene un objeto
containsAll Verifica si la colección tiene una colección
equals Compara con otra colección
isEmpty Verifica si la colección esta vacía
iterator Obtiene un Iterator
remove Elimina un objeto
removeAll Elimina la colección
retainAll Mantener la colección
size Obtiene la cantidad de objetos en la colección
toArray Obtiene un arreglo a partir de una colección
La interfaz Collection y la clase Collections

La clase Collections proporciona métodos static que manipulan las colecciones


mediante el polimorfismo. Estos métodos implementan algoritmos para buscar,
ordenar, etcétera. Esta clase también contiene lo que se llama métodos de
envoltura, los cuales nos permiten tratar a una colección como una colección
sincronizada o una colección no modificable.
Listas

Un objeto List es un objeto Collection ordenado que puede contener elementos duplicados.
Al igual que los índices de arreglos, los índices de objetos List empiezan de cero. Además
de los métodos de interfaz heredados de Collection, List proporciona métodos para
manipular elementos a través de sus índices, para manipular rango especificado de
elementos, para buscar elementos y para obtener un objeto ListIterator para acceder a
los elementos.

La interfaz List es implementada por varias clases, incluyendo a ArrayList, LinkedList y


Vector. La conversión autoboxing (a partir de Java SE 5) ocurre cuando se agregan
valores del tipo primitivo a objetos de estas clases, ya que solo almacenan referencias a
objetos.

Las clases ArrayList y Vector son implementaciones de un objeto List como arreglos que
pueden modificar su tamaño. La clase LinkedList es una implementación de la interfaz
List como una lista enlazada.

La diferencia entre Vector y ArrayList es que los objetos de la clase Vector están
sincronizados de manera predeterminada, mientras que los objetos de la clase ArrayList
no.
Listas

 Los objetos ArrayList se comportan igual que los objetos Vector desincronizados y,
por lo tanto, se ejecutan con mas rapidez que los objetos Vector, ya que los objetos
ArrayList no tienen la sobrecarga que implica la sincronización de los subprocesos.
Listas

ArrayList
Listas
Listas

Si se modifica una colección mediante uno de sus métodos, después de crear un iterador
para esa colección, el iterador se vuelve invalido de manera inmediata; cualquier operacion
realizada con el iterador después de ese punto lanza excepciones
ConcurrentModificationException. Por esta razón, se dice que los iteradores son de “falla
rápida”.
Listas

LinkedList
Listas
Listas
Listas
Listas

 Pasar un arreglo que contenga datos al método toArray puede crear errores lógicos. Si
el numero de elementos en el arreglo es menor que el numero de elementos en la lista
en la que se llama a toArray, se asigna un nuevo arreglo para almacenar los elementos
de la lista (sin preservar los elementos del arreglo). Si el numero de elementos en el
arreglo es mayor que el numero de elementos de la lista, los elementos del arreglo
(empezando en el índice cero) se sobrescriben con los elementos de la lista. Los
elementos de arreglos que no se sobrescriben retienen sus valores.
Listas

Vector

Al igual que ArrayList, la clase Vector proporciona las herramientas de las estructuras
de datos de tipo arreglo que pueden cambiar su tamaño en forma dinámica.
En cualquier momento, un objeto Vector contiene un número de elementos que es
menor o igual que su capacidad. La capacidad es el espacio que se ha reservado
para los elementos del objeto Vector. Si un Vector requiere capacidad adicional,
crece en base a un incremento de capacidad que el programador especifica, o
mediante un incremento de capacidad predeterminado. Si no especificamos un
incremento de capacidad, o si especificamos uno que sea menor o igual cero, el
sistema duplicará el tamaño de un objeto Vector cada vez que se necesite
capacidad adicional.

 Insertar un elemento en un objeto Vector cuyo tamaño actual sea menor que su
capacidad es una operación relativamente rápida.
 Insertar un elemento en un objeto Vector que necesita crecer mas para dar cabida al
nuevo elemento es una operación relativamente lenta.
Listas

 El incremento de capacidad predeterminado duplica el tamaño del objeto Vector.


Esto puede parecer un desperdicio de almacenamiento, pero en realidad es una
manera eficiente para que muchos objetos Vector aumenten rápidamente al “tamaño
correcto”. Esta operación es mucho mas eficiente que aumentar al objeto Vector
cada vez solo el espacio necesario para contener un solo elemento. La desventaja
es que el objeto Vector podría ocupar mas espacio de lo requerido. Este es un
clásico ejemplo de la concesión entre espacio y tiempo.
 Si el almacenamiento es primordial, use el método trimToSize de Vector para
recortar la capacidad del objeto Vector a su tamaño exacto. Esta operación optimiza
el uso que da un objeto Vector al almacenamiento. Sin embargo, al agregar otro
elemento al objeto Vector, este se vera forzado a crecer en forma dinámica (de
nuevo, una operación relativamente lenta); al recortar su tamaño mediante
trimToSize, no queda espacio para que crezca.
Listas
Listas
Listas
Listas

 Sin sobrescribir el método equals, el programa realiza comparaciones mediante el


operador = = para determinar si dos referencias se refieren al mismo objeto en
memoria.
 Los métodos de Vector llamados contains e indexOf realizan búsquedas lineales
en el contenido de un objeto Vector. Estas búsquedas son ineficientes para objetos
Vector más grandes. Si un programa busca frecuentemente elementos en una
colección, considere utilizar una de las implementaciones de Map de la API
Collection de Java, la cual proporciona herramientas de búsqueda de alta velocidad.
Algoritmos de colecciones

El marco de trabajo de colecciones cuenta con varios algoritmos de alto rendimiento


para manipular los elementos de una colección. Estos algoritmos se implementan
como métodos static de la clase Collections. Los algoritmos sort, binarySearch,
reverse, shuffle, fill y copy operan con objetos List. Los algoritmos min, max,
addAll, frequency y disjoint operan con los objetos Collection.
Algoritmos de colecciones

Algoritmo Descripción
sort Ordena los elementos de un objeto List.
binarySearch Localiza un objeto en un objeto List.
reverse Invierte los elementos de un objeto List.
shuffle Ordena al azar los elementos de un objeto List.
fill Establece cada elemento de un objeto List para que haga
referencia a un objeto especificado.
copy Copia referencias de un objeto List a otro.
min Devuelve el elemento mas pequeño en un objeto Collection.
max Devuelve el elemento mas grande en un objeto Collection.
addAll Anexa todos los elementos de un arreglo a una colección.
frequency Calcula cuantos elementos en la colección son iguales al
elemento especificado.
disjoint Determina si dos colecciones no tienen elementos en común.
La clase Stack

La clase Vector implementa a un arreglo que puede cambiar su tamaño en forma


dinámica. La clase Stack extiende de la clase Vector para implementar una
estructura de datos tipo pila.
La clase Stack
La clase Stack
La clase Stack

 Como Stack extiende a Vector, todos los métodos public de Vector pueden
llamarse en objetos Stack, aún si los métodos no representan operaciones de pila
convencionales. Por ejemplo, el método add de Vector se puede utilizar para
insertar un elemento en cualquier parte de una pila; una operación que podría
“corromper” los datos de la pila. Al manipular un objeto Stack, solo deben usarse los
métodos push y pop para agregar y eliminar elementos de la pila, respectivamente.
La clase PriorityQueue y la interfaz Queue

Queue, es una nueva interfaz de colecciones introducida en Java SE 5, extiende a la


interfaz Collection y proporciona operaciones adicionales para insertar, eliminar e
inspeccionar elementos de una cola.

PriorityQueue, una de las clases que implementa a la interfaz Queue, ordena los
elementos en base a su orden natural, según lo especificado con el método
compareTo de los elementos Comparable, o mediante un objeto Comparator que
se suministra a través del constructor.
Las operciones comunes de PriorityQueue son:
Operaciones Descripción
offer Inserta un elemente en la ubicación apropiada, con base
en el orden de prioridad.
poll Elimina el elemento de mayor prioridad.
peek Obtiene referencia al elemento de mayor prioridad.
clear Elimina todos los elementos de la cola de prioridad.
size Numero de elementos de la cola de prioridad.
La clase PriorityQueue y la interfaz Queue
Conjuntos

Un objeto Set es un objeto Collection que contiene elementos únicos (sin elementos
duplicados).
HashSet almacena sus elementos en una tabla de hash y TreeSet almacena sus
elementos en un árbol.
La interfaz SortedSet extiende a Set y representa un conjunto que mantiene sus
elementos ordenados. La clase TreeSet implementa SortedSet.
El método headSet de TreeSet obtiene una vista de un objeto TreeSet que es menor a
un elemento especificado.
El método tailSet obtiene una vista que es mayor o igual a un elemento especificado.
Cualquier modificación realizada a la vista se realiza al objeto TreeSet.
Conjuntos
Conjuntos
Conjuntos
Conjuntos
Mapas

Los Objetos Map asocian claves a valores y no pueden contener claves duplicadas. Los
objetos Map difieren de los objetos Set en cuanto que los primeros contienen claves
y valores, mientras que los segundos contienen solamente valores. Tres de las
muchas clases que implementan la interfaz Map son HashTable, HashMap y
TreeMap. Los objetos HashTable y HashMap almacenan elementos en tablas hash,
y los objetos TreeMap almacenan elementos en árboles. La interfaz SortedMap
extiende de Map y mantiene sus claves en orden; ya sea en el orden natural de los
elementos o un orden especificado por un objeto Comparator. La clase TreeMap
implementa a SortedMap.
La diferencia en HashTable y HashMap es que la segunda no esta sincronizada y
permite claves y valores null.
Mapas

Método Descripción

put Agrega una clave y un valor.

get Localiza el valor asociado a la clave especificada.

isEmpty Determina si el mapa esta vacio.

keySet Devuelve un conjunto de las claves.

size Determina cantidad de elementos de el map.


Mapas
Mapas
Mapas
La clase Properties

Un objeto Properties es un objeto HashTable persistente que, por lo general, almacena


pares clave-valor de cadenas; suponiendo que el programador utiliza los métodos
setProperty y getProperty para manipular la tabla, en vez de los métodos put y get
heredados de HashTable. Al decir “persistente”, significa que el objeto Properties se
puede escribir en el flujo de salida (posiblemente un archivo) y se puede leer de
vuelta, a través de un flujo de entrada. Un uso común de este objeto en versiones
anteriores de Java era para mantener los datos de configuración de un a aplicación,
o las preferencias de usuarios para las aplicaciones.
La clase Properties
La clase Properties
La clase Properties
La clase Properties
Colecciones sincronizadas

Con excepción de Vector y HashTable, las colecciones en el marco de trabajo de


colecciones están desincronizadas de manera predeterminada, por lo que pueden
operar eficientemente cuando no se requiere el subprocesamiento múltiple. Sin
embargo, debido a que están dsincronizadas, el acceso concurrente a un objeto
Collection por parte de varios subprocesos podría producir resultados
indeterminados, o errores fatales. Para evitar potenciales problemas de
subprocesamiento, se utilizan envolturas de sincronización para las colecciones que
podrían ser utilizadas por varios subprocesos. Un objeto envoltura recibe llamadas a
métodos, agrega la sincronizaciones de subprocesos y delega las llamadas al objeto
de la colección envuelto. La API Collections proporciona un conjunto de métodos
static para envolver colecciones como versiones sincronizadas.

Ejemplo:

List lista1 = new ArrayList ();


List lista2 = Collections.synchronizedList ( lista1 );
Colecciones sincronizadas

Colección Método
Collection synchronizedCollection
List synchronizedList
Set synchronizedSet
SortedSet synchronizedSortedSet
Map synchronizedMap
SortedMap synchronizedSortedMap
Colecciones no modificables

La API Collections proporciona un conjunto de métodos static que crean envolturas no


modificables para las colecciones. Las envolturas no modificables lanzan
excepciones UnsupportedOperationException si se producen intentos por
modificar la colección.

 Puede utilizar una envoltura no modificable para crear una colección que ofrezca
acceso solo de lectura a otros, mientras que a usted le permita acceso de
lectura/escritura. Para ello, simplemente de a los otros una referencia a la envoltura
no modificable, y usted conserve una referencia a la colección original.

Ejemplo:

List lista1 = new ArrayList();


List lista2 = Collections.unmodifiableList ( lista1 );
Colecciones no modificables

Colección Método

Collection unmodifiableCollection

List unmodifiableList

Set unmodifiableSet

SortedSet unmodifiableSortedSet

Map unmodifiableMap

SortedMap unmodifiableSortedMap
Implementaciones Abstractas

El marco de trabajo de colecciones proporciona varias implementaciones abstractas de


interfaces de Collection, a partir de las cuales el programador puede construir
implementaciones completas. Algunas de estas son: AbstractCollection,
AbstractList, AbstractMap y AbstractSet.
Resumen de Clases
Consultas

 Consultas
Ejercicios

 Ejercicios

1) Crear tres colecciones de la clase Persona e ingresar al menos 5


personas.
1) En una se almacenarán en el orden que fueron ingresadas.
2) En otra se mantendrán ordenadas alfabéticamente.
3) La última permitirá devolver una Persona pasando el dni.
4) Persona(long dni, int edad, String nombre).

2) Escriba un programa que lea una serie de nombres de pila y los


almacene en un objeto LinkedList. No almacene nombres
duplicados. Permita al usuario buscar un nombre de pila.
Ejercicios

 Ejercicios

3) Crear un ArrayList con 20 numeros (naturales, enteros, etc.).


1) Imprima los elementos cargados con un for.
2) Imprima los elementos cargados con un iterador.
3) Inserte un número en la posición 14 de la colección.
4) Imprimir el elemento 14 de la lista.
5) Elimine el elemento 10 de la lista.
6) Itere la lista imprimiendo los números menores a 10.
7) Itere la lista completa.

4) Cree una clase, luego cree un arreglo de objetos inicializado de su clase.


Llene una List de su arreglo. Cree un subgrupo de su List utilizando
subList(), y luego elimine este subList de su List utilizando removeAll().
Ejercicios

 Ejercicios

5) Crea una aplicación por consola que me permita llevar el stock de una
empresa de electrodomésticos. Donde las opciones disponibles seran:
vender, ingresar, consultar y listar productos. Cada producto tiene un
código único de identificación, una determinada cantidad de este
producto, nombre, descripción y precio. Tener en cuenta cuando se
consulta un producto que no existe o cuando este no tenga stock. Utilizar
las implementaciones que crea convenientes.

También podría gustarte