Introducción a Java - 07 - Collections
Introducción a Java - 07 - Collections
Collections
Contenido
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.
Método Descripción
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
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.
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
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
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
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
Ejemplo:
Colección Método
Collection synchronizedCollection
List synchronizedList
Set synchronizedSet
SortedSet synchronizedSortedSet
Map synchronizedMap
SortedMap synchronizedSortedMap
Colecciones no modificables
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:
Colección Método
Collection unmodifiableCollection
List unmodifiableList
Set unmodifiableSet
SortedSet unmodifiableSortedSet
Map unmodifiableMap
SortedMap unmodifiableSortedMap
Implementaciones Abstractas
Consultas
Ejercicios
Ejercicios
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.