Anda di halaman 1dari 85

ITSON Manuel Domitsu Kono

Tema 6
Colecciones

Una coleccin, a veces llamada un contenedor, es simplemente un objeto que agrupa
mltiples elementos en una simple unidad. Las colecciones se usan para almacenar,
recuperar, manipular y comunicar datos compuestos. Normalmente representan datos
que forman grupos naturalmente, como una mano de poker (una coleccin de cartas),
una carpeta de correo (una coleccin de cartas) o un directorio telefnico (Un mapeo
de nombres a nmeros telefnicos).

Marco de Colecciones

Un marco de colecciones es una arquitectura unificada para representar y manipular
colecciones. Todos los marcos de colecciones contienen lo siguiente:

Interfaces: Son tipos de datos abstractos que representan colecciones. Las
interfaces permiten manipular a las colecciones independientemente de los
detalles de su implementacin.

Implementaciones: Son las implementaciones concretas de las interfaces de la
la coleccin. Son estructuras de datos reutilizables

Algoritmos: Son mtodos que realizan computaciones tiles, como bsquedas,
ordenamientos, sobre los objetos que implementan interfaces de la coleccin.
Marco de Colecciones de Java

La API de J ava nos proporciona un marco de colecciones formada de una jerarqua de
interfaces y clases que implementan esas interfaces. La figura 6.1 es diagrama de
clases parcial de esa jerarqua. Note que todos los nombres de las interfaces y clases
del marco de colecciones tienen un sufijo, <E>, <T>, <K, V>, etc. Estos sufijos indican
que las interfaces y clases del marco son genricas. Al declarar una instancia de este
marco se debe especificar el tipo del objeto que se va a almacenar en la coleccin.
Esto permite que el compilador pueda verificar que el tipo de objeto que se guarde en
la coleccin es correcto. Por ejemplo

Li st <I nt eger > l i st aEnt er os = new Ar r ayLi st ( ) ;
Set <Canci on> canci ones = new Hashset ( ) ;

138 Colecciones
ITSON Manuel Domitsu Kono

Figura 6.1

Interfaz Collection<E>

La interfaz Col l ect i on<E>representa la raz de la jerarqua del marco de
colecciones de J ava. Representa un grupo de objetos, conocidos como sus elementos.
Algunas colecciones permiten elementos repetidos, otras no. En algunas colecciones
los elementos estn ordenados en otras no. Los diferentes tipos de colecciones estn
representadas por las subinterfaces de Col l ect i on<E>: Li st <E>, Queue<E>,
Deque<E>, Set <E>, Sor t edSet <E>y Navi gabl eSet <E>.

Aunque no hay ninguna clase que implemente directamente la interfaz
Col l ect i on<E>, si hay clases que implementan sus subinterfaces y a travs de
stas, los mtodos de Col l ect i on<E>. En la figura 6.2 se muestran los mtodos
declarados por la interfaz Col l ect i on<E>y en la tabla 6.1 la descripcin de stos
mtodos.

Tema 6 Colecciones 139
ITSON Manuel Domitsu Kono

Figura 6.2

Tabla 6.1 Mtodos de la Interfaz Collection<E>
boolean add(E e)

Agrega el elemento dado por el parmetro a la coleccin. Si la coleccin soporta la operacin. Regresa
t r ue si se pudo agregar el elemento, f al se en el caso que la coleccin ya tenga al elemento y la
coleccin no soporta duplicados.

Lanza:
Unsuppor t edOper at i onExcept i on - Si la coleccin no soporta la operacin.
Cl assCast Except i on Si no se puede agregar un elemento de la clase del elemento.
Nul l Poi nt er Except i on Si el elemento es nulo y la coleccin no admite elementos nulos.
I l l egal Ar gument Except i on Algn aspecto del elemento impide agregarlo a la coleccin.
boolean remove(Object o)

Remueve una sola instancia del elemento del parmetro de la coleccin, si se encuentra. Regresa t r ue
si se pudo remover el elemento, f al se en el caso contrario.

Lanza:
Unsuppor t edOper at i onExcept i on - Si la coleccin no soporta la operacin.
Cl assCast Except i on Si la clase del parmetro no es compatible con la clase de los
elementos.
Nul l Poi nt er Except i on Si el elemento es nulo y la coleccin no admite elementos nulos
int size()

Regresa el nmero de elementos de esta coleccin. Si el nmero de elementos es mayor que
I nt eger . MAX_VALUE, la funcin regresa I nt eger . MAX_VALUE.
140 Colecciones
ITSON Manuel Domitsu Kono
Tabla 6.1 Mtodos de la Interfaz Collection<E>. Cont.
boolean isEmpty()

Regresa verdadero si la coleccin no contiene elementos.
boolean contains(Object o)

Regresa verdadero si la coleccin contiene al elemento del parmetro.

Lanza:
Cl assCast Except i on Si la clase del parmetro no es compatible con la clase de los
elementos.
Nul l Poi nt er Except i on Si el elemento es nulo y la coleccin no admite elementos nulos
boolean containsAll(Collection<?> c)

Regresa verdadero si la coleccin contiene a todos los elementos de la coleccin del parmetro.

Lanza:
Cl assCast Except i on Si la clase de uno o ms elementos de la coleccin del parmetro no
es compatible con la clase de los elementos de esta coleccin.
Nul l Poi nt er Except i on Si uno o ms de los elementos de la coleccin del parmetro es
nulo y esta coleccin no admite elementos nulos
Nul l Poi nt er Except i on Si la coleccin del parmetro es nula.
boolean addAll(Collection<? extends E> c)

Agrega todos los elementos de la coleccin del parmetro a esta coleccin. Regresa t r ue si se
pudieron agregar los elementos, f al se en el caso contrario.

Lanza:
Unsuppor t edOper at i onExcept i on - Si la coleccin no soporta la operacin.
Cl assCast Except i on Si la clase de uno o ms elementos de la coleccin del parmetro no
es compatible con la clase de los elementos de esta coleccin.
Nul l Poi nt er Except i on Si uno o ms de los elementos de la coleccin del parmetro es
nulo y esta coleccin no admite elementos nulos
I l l egal Ar gument Except i on Si algn aspecto de uno de los elementos del parmetro
impide agregarlo a la coleccin.
void clear()

Remueve todos los elementos de esta coleccin. Despus de la operacin la coleccin estar vaca a
menos de que ocurra una excepcin.

Lanza:
Unsuppor t edOper at i onExcept i on - Si la coleccin soporta la operacin.









Tema 6 Colecciones 141
ITSON Manuel Domitsu Kono
Tabla 6.1 Mtodos de la Interfaz Collection<E>. Cont.
boolean removeAll(Collection<?> c)

Remueve todos los elementos de esta coleccin que tambin estn en la coleccin del parmetro.
Regresa t r ue si se pudieron remover los elementos, f al se en el caso contrario.

Lanza:
Unsuppor t edOper at i onExcept i on - Si la coleccin no soporta la operacin.
Cl assCast Except i on Si la clase de uno o ms elementos de la coleccin del parmetro no
es compatible con la clase de los elementos de esta coleccin.
Nul l Poi nt er Except i on Si uno o ms de los elementos de la coleccin del parmetro es
nulo y esta coleccin no admite elementos nulos
Nul l Poi nt er Except i on Si la coleccin del parmetro es nula.
boolean retainAll(Collection<?> c)

Retiene todos los elementos de esta coleccin que tambin estn en la coleccin del parmetro.
Regresa t r ue si se pudieron retener los elementos, f al se en el caso contrario.

Lanza:
Unsuppor t edOper at i onExcept i on - Si la coleccin no soporta la operacin.
Cl assCast Except i on Si la clase de uno o ms elementos de la coleccin del parmetro no
es compatible con la clase de los elementos de esta coleccin.
Nul l Poi nt er Except i on Si uno o ms de los elementos de la coleccin del parmetro es
nulo y esta coleccin no admite elementos nulos
Nul l Poi nt er Except i on Si la coleccin del parmetro es nula.
Object[] toArray()

Regresa un arreglo con todos los elementos de esta coleccin. Si la coleccin mantiene ordenados a
sus elementos, los elementos en el arreglo estarn ordenados en ese mismo orden.
<T> T[] toArray(T[] a)

Regresa un arreglo con todos los elementos de esta coleccin. El tipo del arreglo regresado es el del
tipo del arreglo del parmetro.

Si la coleccin cabe en el arreglo del parmetro, se regresa en l. De otro modo se crea un arreglo. Si el
tamao del arreglo del parmetro es mayor que la coleccin, el siguiente elemento del arreglo despus
de la coleccin se establece a null.

Si la coleccin mantiene ordenados a sus elementos, los elementos en el arreglo estarn ordenados en
ese mismo orden.

Lanza:
Ar r aySt or eExcept i on Si el tipo del arreglo del parmetro no es un supertipo de todos los
elementos de la coleccin.
Nul l Poi nt er Except i on Si el arreglo del parmetro es nulo.
boolean equals(Object o)

Regresa verdadero si esta coleccin es igual al objeto del parmetro
int hashCode()

Regresa el valor del cdigo Hash para esta coleccin.

142 Colecciones
ITSON Manuel Domitsu Kono
Recorrido de Colecciones

Una de las operaciones que ms se realizan con las colecciones es recorrerlas para
procesar sus elementos. Hay dos formas de recorrer una coleccin, con un ciclo for-
each o usando iteradores.
Ciclo for-each

En el Tema 5 se vio una variante del ciclo for llamada ciclo for-each. Esa variante que
puede utilizarse para iterar sobre los elementos de un arreglo tambin puede utilizarse
para iterar sobre los elementos de una coleccin. La sintaxis, en el caso de una
coleccin, es la siguiente:

for(tipo nomVariable: nomColeccion)
{
cuerpo del ciclo
}

Por ejemplo, el siguiente cdigo despliega cada uno de los elementos de una
coleccin:

for(Object o: nomColeccion)
System.out.println(o);

En el caso de las colecciones, el ciclo for-each tiene las mismas limitaciones que su
uso con arreglos:

Slo podemos acceder a los elementos de una colleccin. No podemos
asignarle un valor a los elementos de una coleccin.
Slo se puede trabajar con un solo coleccin. No podemos, por ejemplo
comparar dos colecciones.
Slo se puede accede un elemento a la vez. No podemos comparar, por ejemplo
elementos consecutivos.
Slo se puede recorrer la coleccin hacia adelante y en incrementos de uno.
No puede iterarse sobre slo parte de la coleccin. El ciclo f or - each recorre
todo la coleccin.
No se use si se desea compatibilidad con cdigo previo a la versin 5 de java.
Iteradores

Un iterador es un objeto que permite recorrer una coleccin y remover elementos si se
desea. Para obtener un iterador de una coleccin se invoca a su mtodo i t er at or ( ) .
Todas las colecciones tienen ese mtodo porque la interfaz Col l ect i on<E>hereda la
Interfaz I t er abl e<T>que declara dicho mtodo, tabla 6.2.

Tema 6 Colecciones 143
ITSON Manuel Domitsu Kono
Interfaz Iterable<T>

Tabla 6.2 Mtodo de la Interfaz Iterable<E>
Iterator<T> iterator()

Regresa un iterador sobre un conjunto de elementos de tipo T
Interfaz Iterator<T>
Los iteradores deben implementar la interfaz I t er at or <T>que declara los mtodos
que nos permiten iterar sobre una coleccin.
Tabla 6.3 Mtodos de la Interfaz Iterator<E>
boolean hasNext()

Regresa verdadero si la iteracin tiene ms elementos.
E next()

Regresa el siguiente elemento en la iteracin.

Lanza:
NoSuchEl ement Except i on Si la iteracin no tiene ms elementos.
void remove( )

Remueve de la coleccin el ltimo elemento regresado por el iterador. El mtodo slo puede llamarse
una vez por cada llamada al mtodo next ( ) .

Lanza:
Unsuppor t edOper at i onExcept i on Si la operacin no es soportada por este iterador.
I l l egal St at eExcept i on Si el mtodo next ( ) no ha sido llamado an, o si el mtodo
r emove( ) ya ha sido llamado despus de la ltima llamada al mtodo next ( ) .

Por ejemplo, el ciclo for-each:

for(tipo nomVar: nomColeccion)sentencia;

es equivalente al siguiente fragmento de cdigo que emplea los mtodos de un
iterador:

for (Iterator<t i po> iter = nomColeccion.iterator(); iter.hasNext(); ) {
tipo nomVar = iter.next();
sentencia;
}



144 Colecciones
ITSON Manuel Domitsu Kono
Listas

Una lista es una coleccin ordenada. El usuario de la interfaz Li st <E>tiene un control
preciso sobre la posicin en la lista en que cada elemento se inserta. El usuario puede
acceder a los elementos de la lista por su ndice (su posicin en la lista) y buscar
elementos en la lista.

Normalmente las listas permiten elementos duplicados, formalmente, las listas permiten
pares de elementos e1 y e2 tal que e1. equal s( e2) , y permite mltiples elementos
nulos si es que permite elementos nulos. En la figura 6.3 se muestran las interfaces y
clases que implementan las listas.

Figura 6.3
Tema 6 Colecciones 145
ITSON Manuel Domitsu Kono
Interfaz List<E>

La interfaz Li st <E>establece los mtodos comunes a todas las listas y su descripcin
se encuentra en la tabla 6.4.

Tabla 6.4 Mtodos de la Interfaz List<E>
void add(int index, E element)

Inserta el elemento dado por el parmetro el ement en la posicin dada por el parmetro i ndex. El
elemento en la posicin actual de la lista y los elementos subsiguientes son desplazados a la derecha
(aumentan su ndice en uno).

Lanza:
Unsuppor t edOper at i onExcept i on - Si la lista no soporta la operacin.
Cl assCast Except i on Si la clase del elemento del impide que sea agregado a la lista.
Nul l Poi nt er Except i on Si el elemento es nulo y la lista no admite elementos nulos
I l l egal Ar gument Except i on Si algn aspecto del elemento del parmetro impide que sea
agregado a la lista.
I ndexOut Of BoundsExcept i on Si el ndice se encuentra fuera de rango (i ndex < 0 | |
i ndex > si ze( ) ).
E remove(int index)

Extrae el elemento de la posicin dada por el parmetro i ndex. Los elementos subsiguientes son
desplazados a la izquierda (disminuyen su ndice en uno).

Lanza:
Unsuppor t edOper at i onExcept i on - Si la lista no soporta la operacin.
I ndexOut Of BoundsExcept i on Si el ndice se encuentra fuera de rango (i ndex < 0 | |
i ndex > si ze( ) ).
boolean addAll(int index, Collection<? extends E> c)

Agrega todos los elementos de la coleccin dada por el parmetro c en la posicin dada por el
parmetro i ndex. El elemento en la posicin actual de la lista y los elementos subsiguientes son
desplazados a la derecha (aumentan su ndice en uno). Los nuevos elementos son agregados en el
orden en que son regresados por el iterador de la coleccin. Regresa t r ue si se pudieron agregar los
elementos, f al se en el caso contrario.

Lanza:
Unsuppor t edOper at i onExcept i on - Si la lista no soporta la operacin.
Cl assCast Except i on Si la clase de uno de los elementos de la coleccin impide que sea
agregado a la lista.
Nul l Poi nt er Except i on Si alguno de los elementos de la coleccin es nulo y la lista no
admite elementos nulos
I l l egal Ar gument Except i on Si algn aspecto de alguno de los elementos de la coleccin
impide que sea agregado a la lista.
I ndexOut Of BoundsExcept i on Si el ndice se encuentra fuera de rango (i ndex < 0 | |
i ndex > si ze( ) ).


146 Colecciones
ITSON Manuel Domitsu Kono
Tabla 6.4 Mtodos de la Interfaz List<E>. Cont.
E get(int index)

Regresa el elemento que se encuentra en la posicin especificada por el parmetro.

Lanza:
I ndexOut Of BoundsExcept i on Si el ndice se encuentra fuera de rango (i ndex < 0 | |
i ndex > si ze( ) ).
void set(int index, E element)

Reemplaza el elemento en la posicin dada por el parmetro i ndex por el elemento dado por el
parmetro el ement . El elemento en la posicin actual de la lista y los elementos subsiguientes son
desplazados a la derecha (aumentan su ndice en uno).

Lanza:
Unsuppor t edOper at i onExcept i on - Si la lista no soporta la operacin.
Cl assCast Except i on Si la clase del elemento del impide que sea agregado a la lista.
Nul l Poi nt er Except i on Si el elemento es nulo y la lista no admite elementos nulos.
I l l egal Ar gument Except i on Si algn aspecto del elemento del parmetro impide que sea
agregado a la lista.
I ndexOut Of BoundsExcept i on Si el ndice se encuentra fuera de rango (i ndex < 0 | |
i ndex > si ze( ) ).
int indexOf(Object o)

Regresa el ndice de la primera ocurrencia del elemento del parmetro. -1 si no se encuentra.

Lanza:
Cl assCast Except i on Si la clase del elemento es incompatible con esta lista.
Nul l Poi nt er Except i on Si el elemento es nulo y la lista no admite elementos nulos.
int lastIndexOf(Object o)

Regresa el ndice de la ltima ocurrencia del elemento del parmetro. -1 si no se encuentra.

Lanza:
Cl assCast Except i on Si la clase del elemento es incompatible con esta lista.
Nul l Poi nt er Except i on Si el elemento es nulo y la lista no admite elementos nulos.
ListIterator<E> listIterator()

Regresa un iterador de lista de los elementos de esta lista.
ListIterator<E> listIterator( i nt i ndex)

Regresa un iterador de lista de los elementos de esta lista empezando en la posicin indicada por el
parmetro i ndex. El ndice indica el primer elemento que ser regresado por la llamada al mtodo
next ( ) . Si inicialmente se llama al mtodo pr evi ous( ) se obtendr el elemento i ndi ce- 1.

Lanza:
I ndexOut Of BoundsExcept i on Si el ndice se encuentra fuera de rango (i ndex < 0 | |
i ndex > si ze( ) ).



Tema 6 Colecciones 147
ITSON Manuel Domitsu Kono
Tabla 6.4 Mtodos de la Interfaz List<E>. Cont.
List<E> subList(int fromIndex, int toIndex)

Regresa una vista de una porcin de la esta lista desde f r omI ndex inclusive hasta t oI ndex exclusive.
Si f r omI ndex y t oI ndex son iguales, la sublista es nula. Cualquier cambio en la sublista afecta a la
lista y viceversa.

Lanza:
I ndexOut Of BoundsExcept i on Si uno de los ndices tiene un valor ilegal (f r omI ndex <
0 | | t oI ndex > si ze( ) | | f r omI ndex < 0 | | t oI ndex).
Interfaz ListIterator<E>

Aparte de poder iterar sobre sus elementos mediante un iterador que implemente la
interfaz I t er at or <T>, una lista puede usar un iterador para listas, que implementa la
interfaz Li st I t er at or <E>, que permite recorrer una lista en ambas direcciones,
modificar la lista durante una iteracin y la posicin actual del iterador en la lista. El
iterador para listas no tiene un elemento actual; la posicin del cursor siempre est
entre los elementos regresados por los mtodos pr evi ous( ) y next ( ) . En una lista
de longitud n, hay n+1 valores vlidos, de 0 a n, inclusive.

En la tabla 6.5 se muestran los mtodos declarados por la interfaz Li st I t er at or <E>.

Tabla 6.5 Mtodos de la Interfaz ListIterator<E>
void add(E e)

Inserta el elemento dado por el parmetro en la lista. El elemento ser insertado inmediatamente antes
que el elemento regresado por la llamada al mtodo next ( ) , si existe, e inmediatamente despus del
elemento regresado por la llamada al mtodo pr evi ous( ) , si existe. Si la lista no contiene elementos,
el elemento ser el nico elemento de la lista.

Lanza:
Unsuppor t edOper at i onExcept i on Si la operacin no es soportada por este iterador.
Cl assCast Except i on Si la clase del elemento del parmetro le impide ser agregado a la
lista.
I l l egal Ar gument Except i on Si algn aspecto del elemento del parmetro impide
agregarlo a la coleccin.
void remove( )

Remueve de la lista el ltimo elemento regresado por next ( ) o pr evi ous( ) . Esta operacin slo
puede llamarse una vez por llamada a next ( ) o pr evi ous( ) . Esta operacin slo puede hacerse si
Li st I t er at or . add( ) no ha sido llamada despus de la ltima llamada a next ( ) o pr evi ous( ) .

Lanza:
Unsuppor t edOper at i onExcept i on Si la operacin no es soportada por este iterador.
I l l egal St at eExcept i on Si el mtodo next ( ) o pr evi ous( ) no han sido llamados an, o
si el mtodo r emove ya ha sido llamado despus de la ltima llamada al mtodo next ( ) o
pr evi ous( ) .

148 Colecciones
ITSON Manuel Domitsu Kono
Tabla 6.5 Mtodos de la Interfaz ListIterator<E>. Cont.
void set(E e)

Remplaza de la lista el ltimo elemento regresado por next ( ) o pr evi ous( ) con el elemento
especifcado por el parmetro. Esta operacin slo puede hacerse si ninguno de
Li st I t er at or . r emove( ) o Li st I t er at or . add( ) no ha sido llamada despus de la ltima llamada
a next ( ) o pr evi ous( ) .

Lanza:
Unsuppor t edOper at i onExcept i on Si la operacin no es soportada por este iterador.
Cl assCast Except i on Si la clase del elemento del parmetro le impide ser agregado a la
lista.
I l l egal Ar gument Except i on Si algn aspecto del elemento del parmetro impide
agregarlo a la coleccin.
I l l egal St at eExcept i on Si el mtodo next ( ) o pr evi ous( ) no han sido llamados an, o
si el mtodo r emove ya ha sido llamado despus de la ltima llamada al mtodo next ( ) o
pr evi ous( ) .
boolean hasNext()

Regresa verdadero si este iterador tiene ms elementos cuando se recorre la lista hacia adelante.
boolean hasPrevious()

Regresa verdadero si este iterador tiene ms elementos cuando se recorre la lista hacia atrs.
E next()

Regresa el siguiente elemento de la lista.

Lanza:
NoSuchEl ement Except i on Si la iteracin no tiene elemento siguiente.
E previous()

Regresa el anterior elemento de la lista.

Lanza:
NoSuchEl ement Except i on Si la iteracin no tiene elemento anterior.
int nextIndex()

Regresa el ndice del elemento que sera regresado por la siguiente llamada a next ( ) , o el tamao de
la lista si el iterador se encuentra al final de la lista.
int previousIndex()

Regresa el ndice del elemento que sera regresado por la siguiente llamada a pr evi ous( ) , o -1 si el
iterador se encuentra al inicio de la lista.

Interfaz Queue<E>

Las colas son objetos que implementan la interfaz Queue<E>permiten almacenar un
elemento previo a su procesamiento. La interfaz Queue<E>aparte de las operaciones
de la interfaz Col l ect i on<E>, provee las operaciones para insertar, extraer e
Tema 6 Colecciones 149
ITSON Manuel Domitsu Kono
inspeccionar. Las colas por lo general ordenan los elementos de forma PEPS (primeros
en entrar, primeros en salir).

En la tabla 6.6 se muestran los mtodos declarados por la interfaz Queue<E.

Tabla 6.6 Mtodos de la Interfaz Queue<E>
boolean offer(E )

Inserta el elemento dado por el parmetro, si es posible.

Regresa:
Verdadero si fue posible agregar al elemento, falso en caso contrario.
E poll()

Obtiene y remueve un elemento de la cabeza de la cola.

Regresa:
La cabeza de la cola, nul l en caso contrario.
E remove()

Obtiene y remueve un elemento de la cabeza de la cola.

Lanza:
NoSuchEl ement Except i on Si la iteracin no tiene elemento anterior.
E peek()

Obtiene pero no remueve un elemento de la cabeza de la cola.

Regresa:
La cabeza de la cola, nul l en caso contrario.
E element()

Obtiene pero no remueve un elemento de la cabeza de la cola.

Lanza:
NoSuchEl ement Except i on Si la iteracin no tiene elemento anterior.
Interfaz Deque<E>

Las colas dobles son objetos que implementan la interfaz Deque<E>. Las colas dobles
permiten la insercin y remocin de elementos en ambos lados de la cola. La mayora
de las clases que implementan esta interfaz no imponen un tamao fijo en el nmero
de elementos que pueden contener, pero la interfaz tambin soporta colas dobles de
tamao fijo.

En la tabla 6.7 se muestran los mtodos declarados por la interfaz Deque<E.




150 Colecciones
ITSON Manuel Domitsu Kono
Tabla 6.7 Mtodos de la Interfaz Deque<E>
void addFirst(E e)

Inserta el elemento dado por el parmetro, en el frente de la cola, si es posible sin violar las
restricciones de capacidad.

Lanza:
I l l egal St at eExcept i on Si el elemento no puede agregarse en este momento debido a
las restricciones de capacidad.
Cl assCast Except i on Si la clase del elemento impide que sea agregado a la cola doble.
Nul l Poi nt er Except i on Si el elemento es nulo y la cola doble no admite elementos nulos.
I l l egal Ar gument Except i on Si algn atributo del elemento del parmetro impide
agregarlo a la coleccin.
void addLast(E e)

Inserta el elemento dado por el parmetro, en el frente de la cola, si es posible sin violar las
restricciones de capacidad.

Lanza:
I l l egal St at eExcept i on Si el elemento no puede agregarse en este momento debido a
las restricciones de capacidad.
Cl assCast Except i on Si la clase del elemento impide que sea agregado a la cola doble.
Nul l Poi nt er Except i on Si el elemento es nulo y la cola doble no admite elementos nulos.
I l l egal Ar gument Except i on Si algn atributo del elemento del parmetro impide
agregarlo a la coleccin.
boolean offerFirst(E e)

Inserta el elemento dado por el parmetro al frente de esta cola doble a menos que se viole las
restricciones de capacidad. Si la cola doble tiene restricciones de capacidad es preferible este mtodo al
de addFi r st ( ) . Regresa t r ue si se agreg el elemento a la cola, f al se en caso contrario.

Lanza:
Cl assCast Except i on Si la clase del elemento impide que sea agregado a la cola doble.
Nul l Poi nt er Except i on Si el elemento es nulo y la cola doble no admite elementos nulos.
I l l egal Ar gument Except i on Si algn atributo del elemento del parmetro impide
agregarlo a la coleccin.
boolean offerLast(E e)

Inserta el elemento dado por el parmetro al final de esta cola doble a menos que se viole las
restricciones de capacidad. Si la cola doble tiene restricciones de capacidad es preferible este mtodo al
de addLast ( ) . Regresa t r ue si se agreg el elemento a la cola, f al se en caso contrario.

Lanza:
Cl assCast Except i on Si la clase del elemento impide que sea agregado a la cola doble.
Nul l Poi nt er Except i on Si el elemento es nulo y la cola doble no admite elementos nulos.
I l l egal Ar gument Except i on Si algn atributo del elemento del parmetro impide
agregarlo a la coleccin.
E pollFirst()

Regresa y elimina el primer elemento de la cola doble si lo hay. En caso contrario regresa nul l .


Tema 6 Colecciones 151
ITSON Manuel Domitsu Kono
Tabla 6.7 Mtodos de la Interfaz Deque<E>. Cont.
E pollLast()

Regresa y elimina el ltimo elemento de la cola doble si lo hay. En caso contrario regresa nul l .
E removeFirst()

Regresa y elimina el primer elemento de la cola doble.

Lanza:
NoSuchEl ement Except i on Si la cola doble est vaca.
E removeLast()

Regresa y elimina el ltimo elemento de la cola doble.

Lanza:
NoSuchEl ement Except i on Si la cola doble est vaca.
boolean removeFirstOccurrence(Object o)

Remueve la primera ocurrencia del elemento dado por el parmetro de esta cola doble. Si la cola no
contiene al elemento la deja sin alterar. Regresa t r ue si se removi el elemento de la cola, f al se en
caso contrario.

Lanza:
Cl assCast Except i on Si la clase del elemento especificado por el parmetro es
incompatible con los elementos de la cola doble.
Nul l Poi nt er Except i on Si el elemento es nulo y la cola doble no admite elementos nulos.
boolean removeLastOccurrence(Object o)

Remueve la ltima ocurrencia del elemento dado por el parmetro de esta cola doble. Si la cola no
contiene al elemento la deja sin alterar. Regresa t r ue si se removi el elemento de la cola, f al se en
caso contrario.

Lanza:
Cl assCast Except i on Si la clase del elemento especificado por el parmetro es
incompatible con los elementos de la cola doble.
Nul l Poi nt er Except i on Si el elemento es nulo y la cola doble no admite elementos nulos.
E peelFirst()

Regresa, pero no elimina el primer elemento de la cola doble si lo hay. En caso contrario regresa nul l .
E peekLast()

Regresa, pero no elimina el ltimo elemento de la cola doble si lo hay. En caso contrario regresa nul l .
E getFirst()

Regresa, pero no elimina el primer elemento de la cola doble.

Lanza:
NoSuchEl ement Except i on Si la cola doble est vaca.
E getLast()

Regresa, pero no elimina el ltimo elemento de la lista.

Lanza:
NoSuchEl ement Except i on Si la cola doble est vaca.
152 Colecciones
ITSON Manuel Domitsu Kono
Tabla 6.7 Mtodos de la Interfaz Deque<E>. Cont.
void push(E e)

Inserta el elemento dado por el parmetro en la pila representada por esta cola, si es posible sin violar
las restricciones de capacidad. Este mtodo es equivalente al mtodo addFi r st ( ) .

Lanza:
I l l egal St at eExcept i on Si el elemento no puede agregarse en este momento debido a
las restricciones de capacidad.
Cl assCast Except i on Si la clase del elemento impide que sea agregado a la cola doble.
Nul l Poi nt er Except i on Si el elemento es nulo y la cola doble no admite elementos nulos.
I l l egal Ar gument Except i on Si algn atributo del elemento del parmetro impide
agregarlo a la coleccin.
E pop()

Extrae un elemento de la pila representada por esta cola. Este mtodo es equivalente al mtodo
r emoveFi r st ( ) .

Lanza:
NoSuchEl ement Except i on Si la lista est vaca.
Iterator<E> descendingIterator()

Regresa un iterador para los elementos de la cola doble en orden secuencial invertido. Los elementos
sern regresados del ltimo al primero.
Clase ArrayList<E>

La clase Ar r ayLi st <E>implementa la interfaz Li st <E>(y por lo tanto la interfaz
Col l ect i on<E>) mediante un arreglo que cambia su tamao de acuerdo a las
necesidades. La clase Ar r ayLi st <E>permite todo tipo de elementos, incluso nul l .
Adems de los mtodos que implementan la interfaz Li st <E>, esta clase provee
mtodos para manipular el tamao del arreglo usado para almacenar la lista.

En la tabla 6.8 se muestran los mtodos exclusivos de la clase Ar r ayLi st <E>.

Tabla 6.8 Mtodos exclusivos de la Clase Arraylist<E>
ArrayList()

Construye una lista vaca con una capacidad inicial de 10.
ArrayList(int inicialCapacity)

Construye una lista vaca con la capacidad inicial dada por el parmetro.

Lanza:
I l l egal Ar gument Except i on Si el valor de la capacidad inicial es negativo.





Tema 6 Colecciones 153
ITSON Manuel Domitsu Kono
Tabla 6.8 Mtodos exclusivos de la Clase Arraylist<E>. Cont.
ArrayList(Collection<? extends E> c)

Construye una lista que contiene los elementos de la coleccin del parmetro. En el orden en que son
regresados por el iterador de la coleccin. La lista tiene una capacidad inicial del 110% del tamao de la
coleccin.

Lanza:
Nul l Poi nt er Except i on Si la coleccin del parmetro es nula.
Object clone()

Regresa una copia de la lista. Los elementos de la lista no son copiados.
void trimToSize()

Reduce la capacidad de la lista al tamao actual de la lista
void ensureCapacity(int minCapacity)

Incrementa la capacidad mnima de la lista, si es necesario, para asegurarse de que tenga al menos la
capacidad especificada por el parmetro.
Clase LinkedList<E>

La clase Li nkedLi st <E>implementa las interfaces Li st <E>(y por lo tanto la interfaz
Col l ect i on<E>) y Deque<E>(y por lo tanto la interfaz Queue<E>) mediante una lista
ligada. La clase Li nkedLi st <E>permite todo tipo de elementos, incluso nul l . Los
mtodos que implementa la clase Li nkedLi st <E>, permite usarla como pila, cola o
doble cola.

En la tabla 6.9 se muestran los mtodos exclusivos de la clase Li nkedLi st <E.

Tabla 6.9 Mtodos exclusivos de la Clase Linkedlist<E>
LinkedList()

Construye una lista vaca.
LinkedList(Collection<? extends E> c)

Construye una lista que contiene los elementos de la coleccin del parmetro. En el orden en que son
regresados por el iterador de la coleccin.

Lanza:
Nul l Poi nt er Except i on Si la coleccin del parmetro es nula.
Object clone()

Regresa una copia de la lista. Los elementos de la lista no son copiados.
Ejemplos Sobre Listas

Para el ejemplo del programa del amante de la msica y el cine, se desea implementar
un mecanismo que permita catalogar (almacenar y consultar) su coleccin. En este
tema el mecanismo se implementar usando listas, aunque las listas no permiten
154 Colecciones
ITSON Manuel Domitsu Kono
almacenar permanentemente los datos. Ms adelante se modificar este mecanismo
para que emplee archivos y una base de datos.

Si al querer modificar o eliminar un dato, el dato no existe, se lanzar una excepcin
del tipo DAOExcept i on. El siguiente cdigo muestra la implementacin de la
excepcin DAOExcept i on.

DAOException.java
/ *
* DAOExcept i on. j ava
*
* Cr eada el 13 de sept i embr e de 2007, 12: 01 AM
*/
package excepci ones;

/ **
* Est a cl ase r epr esent a a l as excepci ones l anzadas por l as cl ases
* que se encar gan de acceder a l os dat os en el mecani smo de per si st enci a.
*
* @aut hor mdomi t su
*/
publ i c cl ass DAOExcept i on ext ends Runt i meExcept i on {
/ **
* Const r uct or por omi si n. Const r uye una excepci n con un mensaj e de er r or
* nul o.
*/
publ i c DAOExcept i on( ) {
}

/ **
* Const r uye una excepci n con el mensaj e de er r or del par met r o.
* @par ammsj Mensaj e de er r or .
*/
publ i c DAOExcept i on( St r i ng msj ) {
super ( msj ) ;
}

/ **
* Const r uye una excepci n con el mensaj e de er r or del par met r o y l a causa
* or i gi nal del er r or .
* @par ammsj Mensaj e de er r or .
* @par amcausa Causa or i gi nal del er r or .
*/
publ i c DAOExcept i on( St r i ng msj , Thr owabl e causa) {
super ( msj , causa) ;
}

/ **
* Const r uye una excepci n l a causa or i gi nal del er r or .
* @par amcausa Causa or i gi nal del er r or .
*/
publ i c DAOExcept i on( Thr owabl e causa) {
super ( causa) ;
}
}
Tema 6 Colecciones 155
ITSON Manuel Domitsu Kono
Para encapsular el mecanismo de almacenamiento de los datos se construyen cuatro
clases nuevas: Medi os, Canci ones, Pel i cul as y Gener os se muestran en el
diagrama de clases de la figura 6.4

Figura 6.4

La clase Medi os tiene como atributo una lista de tipo Medi o. Los mtodos de la clase
Medi os permiten buscar un medio dentro del catlogo dada su clave, agregar, actualizar
y eliminar un medio al catlogo, listar los medios que sean del mismo ttulo dado, del
mismo gnero dado y del mismo perodo dado. El cdigo de la clase Medi os es el
siguiente:

Medios.java
/ *
* Medi os. j ava
*/
package dao;

i mpor t j ava. ut i l . Li st ;
i mpor t j ava. ut i l . Ar r ayLi st ;
i mpor t j ava. ut i l . I t er at or ;
i mpor t obj et osSer vi ci o. *;
i mpor t obj et osNegoci o. Medi o;
i mpor t excepci ones. DAOExcept i on;

/ **
* Est a cl ase per mi t e al macenar , act ual i zar , el i mi nar y consul t ar
* medi os ( canci ones y pel cul as) del pr ogr ama Amant eMusi ca.
* Los dat os se al macenan en una l i st a del t i po Ar r ayLi st .
*
* @aut hor mdomi t su
156 Colecciones
ITSON Manuel Domitsu Kono
*/
publ i c cl ass Medi os {
pr ot ect ed Li st <Medi o> medi os;

/ **
* Cr ea una l i st a par a al macenar l os medi os
*/
publ i c Medi os( ) {
/ / Cr ea l a l i st a par a al macenar l as canci ones
medi os = new Ar r ayLi st <Medi o>( ) ;
}

/ **
* Regr esa el medi o de l a l i st a que coi nci da con el medi o del par amet r o.
* Las cl aves de l os medi os de l a l i st a y del par amet r o deben coi nci di r
* @par ammedi o Medi o con l a cl ave del medi o a r egr esar
* @r et ur n El medi o cuya cl ave es i gual a l a cl ave del medi o
* dado por el par met r o, si se encuent r a, nul l en caso cont r ar i o
*/
publ i c Medi o obt en( Medi o medi o) {
/ / Busca el ndi ce del medi o de cl ave
i nt pos = medi os. i ndexOf ( medi o) ;

/ / Si l o encont r , r egr sal o
i f ( pos >= 0) r et ur n medi os. get ( pos) ;

/ / si no, r egr esa nul l
r et ur n nul l ;
}

/ **
* Agr ega un medi o a l a l i st a de medi os
* @par ammedi o Medi o a agr egar .
*/
publ i c voi d agr ega( Medi o medi o) {
/ / Agr ega l a canci n o pel cul a a l a l i st a
medi os. add( medi o) ;
}

/ **
* Act ual i za el medi o de l a l i st a que coi nci da con el medi o del par amet r o.
* Las cl aves de l os medi os de l a l i st a y del par amet r o deben coi nci di r
* @par ammedi o Medi o a act ual i zar .
* @t hr ows DAOExcept i on Si el medi o no exi st e.
*/
publ i c voi d act ual i za( Medi o medi o) t hr ows DAOExcept i on {
/ / Busca un medi o con l a mi sma cl ave.
i nt pos = medi os. i ndexOf ( medi o) ;

/ / Si no l o encont r o, no se act ual i za
i f ( pos < 0) t hr ow new DAOExcept i on( "Medi o i nexi st ent e") ;

/ / Si l o hay, act ual i zal o
medi os. set ( pos, medi o) ;
}

/ **
Tema 6 Colecciones 157
ITSON Manuel Domitsu Kono
* El i mi na el medi o de l a l i st a que coi nci da con el medi o del par amet r o.
* Las cl aves de l os medi os de l a l i st a y del par amet r o deben coi nci di r
* @par ammedi o Medi o a el i mi nar .
* @t hr ows DAOExcept i on Si el medi o no exi st e.
*/
publ i c voi d el i mi na( Medi o medi o) t hr ows DAOExcept i on {
/ / Si el medi o exi st e se bor r a, en caso cont r ar i o l anza excepci n.
i f ( medi os. r emove( medi o) )
t hr ow new DAOExcept i on( "La Canci n o Pel cul a no exi st e") ;
}

/ **
* Regr esa una l i st a de t odos l os medi os.
* @r et ur n Li st a de t odos l os medi os
*/
publ i c Li st l i st a( ) {

r et ur n medi os;
}

/ **
* Regr esa l a l i st a de l os medi os del mi smo t t ul o que el par met r o
* @par amt i t ul o T t ul o de l os medi os a l i st ar
* @r et ur n Li st a de medi os del mi smo t t ul o que el par met r o
*/
publ i c Li st l i st aTi t ul o( St r i ng t i t ul o) {
Li st <Medi o> l i st a = new Ar r ayLi st <Medi o>( ) ;

/ / Recor r e l a l i st a
f or ( I t er at or <Medi o> i t er ador = medi os. i t er at or ( ) ; i t er ador . hasNext ( ) ; ) {
Medi o medi o = i t er ador . next ( ) ;
/ / Si es el t t ul o especi f i cado
i f ( t i t ul o. equal s( medi o. get Ti t ul o( ) ) )
/ / Agr ega el medi o a l a l i st a
l i st a. add( medi o) ;
}

r et ur n l i st a;
}

/ **
* Cr ea l a l i st a de l os medi os del mi smo gener o que el par met r o
* @par amcveGener o Cl ave del gner o de l os medi os a l i st ar
* @r et ur n Li st a de medi os del mi smo gener o que el par met r o
*/
publ i c Li st l i st aGener o( St r i ng cveGener o) {
Li st <Medi o> l i st a = new Ar r ayLi st <Medi o>( ) ;

/ / Recor r e l a l i st a
f or ( I t er at or <Medi o> i t er ador = medi os. i t er at or ( ) ; i t er ador . hasNext ( ) ; ) {
Medi o medi o = i t er ador . next ( ) ;
/ / Si es el gner o especi f i cado
i f ( cveGener o. equal s( medi o. get Gener o( ) . get CveGener o( ) ) )
/ / Agr ega el medi o a l a l i st a
l i st a. add( medi o) ;
}

158 Colecciones
ITSON Manuel Domitsu Kono
r et ur n l i st a;
}

/ **
* Cr ea l a l i st a de l os medi os del mi smo per i odo que el par met r o
* @par amper i odo Per i odo de l os medi os a l i st ar
* @r et ur n Li st a de l os medi os del mi smo per i odo que el par met r o
*/
publ i c Li st l i st aPer i odo( Per i odo per i odo) {
Li st <Medi o> l i st a = new Ar r ayLi st <Medi o>( ) ;

/ / Recor r e l a l i st a
f or ( I t er at or <Medi o> i t er ador = medi os. i t er at or ( ) ; i t er ador . hasNext ( ) ; ) {
Medi o medi o = i t er ador . next ( ) ;
/ / Si es el per i odo especi f i cado
i f ( per i odo. cont i ene( medi o. get Fecha( ) ) )
/ / Agr ega el medi o a l a l i st a
l i st a. add( medi o) ;
}

r et ur n l i st a;
}
}

La clase Canci ones tiene una referencia a la lista de tipo Medi o creada en la clase
Medios. Los mtodos de la clase Canci ones permiten obtener una cancin dada su
clave, listar las canciones que sean de un intrprete, de un autor o de un lbum dado. El
cdigo de la clase Canci ones es el siguiente.

Canciones.java
/ *
* Canci ones. j ava
*/
package dao;

i mpor t j ava. ut i l . Ar r ayLi st ;
i mpor t j ava. ut i l . I t er at or ;
i mpor t j ava. ut i l . Li st ;
i mpor t obj et osNegoci o. Canci on;
i mpor t obj et osNegoci o. Medi o;

/ **
* Est a cl ase per mi t e consul t ar canci ones del pr ogr ama Amant eMusi ca
* Los dat os se al macenan en una l i st a del t i po Ar r ayLi st .
*
* @aut hor mdomi t su
*/
publ i c cl ass Canci ones ext ends Medi os {
/ / Cr ea l a l i st a par a al macenar l as canci ones
pr i vat e Li st <Medi o> canci ones;

/ **
* Const r uct or vaci o
*/
publ i c Canci ones( ) {
Tema 6 Colecciones 159
ITSON Manuel Domitsu Kono
/ / Hace que l a r ef er enci a canci ones apunt e a l a l i st a medi os
/ / de l a cl ase Medi os
canci ones = medi os;
}

/ **
* Regr esa l a canci n de l a l i st a cuya cl ave coi nci da con l a cl ave
* de l a canci n dado por el par met r o
* @par amcanci on Canci n con l a cl ave de l a canci n a r egr esar
* @r et ur n La canci n cuya cl ave es i gual a l a cl ave de l a canci n
* dada por el par met r o
*/
publ i c Canci on obt en( Canci on canci on) {
/ / Obt i ene l a canci n i nvocando al mt odo obt en( ) de l a cl ase padr e Medi os
r et ur n ( Canci on) super . obt en( canci on) ;
}

/ **
* Regr esa l a l i st a de canci ones con el mi smo i nt er pr et e que el par met r o
* @par ami nt er pr et e I nt er pr et e de l as canci ones a l i st ar
* @r et ur n La l i st a de canci ones con el mi smo i nt er pr et e que el par met r o
*/
publ i c Li st <Canci on> l i st aI nt er pr et e( St r i ng i nt er pr et e) {
Li st <Canci on> l i st a = new Ar r ayLi st <Canci on>( ) ;

/ / Recor r e l a l i st a
f or ( I t er at or <Medi o> i t er ador = canci ones. i t er at or ( ) ; i t er ador . hasNext ( ) ; ) {
Canci on canci on = ( Canci on) i t er ador . next ( ) ;
/ / Si es el i nt r pr et e especi f i cado
i f ( i nt er pr et e. equal s( canci on. get I nt er pr et e( ) ) )
/ / Agr ega l a canci n a l a l i st a
l i st a. add( canci on) ;
}

r et ur n l i st a;
}

/ **
* Regr esa l a l i st a de canci ones con el mi smo aut or que el par met r o
* @par amaut or Aut or de l as canci ones a l i st ar
* @r et ur n La l i st a de canci ones con el mi smo aut or que el par met r o
*/
publ i c Li st <Canci on> l i st aAut or ( St r i ng aut or ) {
Li st <Canci on> l i st a = new Ar r ayLi st <Canci on>( ) ;

/ / Recor r e l a l i st a
f or ( I t er at or <Medi o> i t er ador = canci ones. i t er at or ( ) ; i t er ador . hasNext ( ) ; ) {
Canci on canci on = ( Canci on) i t er ador . next ( ) ;
/ / Si es el aut or de l a l et r a especi f i cado
i f ( aut or . equal s( canci on. get Aut or ( ) ) )
/ / Agr ega l a canci n a l a l i st a
l i st a. add( canci on) ;
}
r et ur n l i st a;
}

/ **
160 Colecciones
ITSON Manuel Domitsu Kono
* Regr esa l a l i st a de canci ones del mi smo l bumque el par met r o
* @par amal buml bumde l as canci ones a l i st ar
* @r et ur n La l i st a de canci ones del mi smo l bum
*/
publ i c Li st <Canci on> l i st aAl bum( St r i ng al bum) {
Li st <Canci on> l i st a = new Ar r ayLi st <Canci on>( ) ;

/ / Recor r e l a l i st a
f or ( I t er at or <Medi o> i t er ador = canci ones. i t er at or ( ) ; i t er ador . hasNext ( ) ; ) {
Canci on canci on = ( Canci on) i t er ador . next ( ) ;
/ / Si es el l bumespeci f i cado
i f ( al bum. equal s( canci on. get Al bum( ) ) )
/ / Agr ega l a canci n a l a l i st a
l i st a. add( canci on) ;
}

r et ur n l i st a;
}
}

La clase Pel i cul as tiene una referencia a la lista de tipo Medi o creada en la clase
Medios. Los mtodos de la clase Pel i cul as permiten obtener una pelcula dada su
clave, listar las pelculas que sean de un actor o de un director dados. El cdigo de la
clase Peliculas es el siguiente.

Peliculas.java
/ *
* Pel i cul as. j ava
*/
package dao;

i mpor t j ava. ut i l . Ar r ayLi st ;
i mpor t j ava. ut i l . I t er at or ;
i mpor t j ava. ut i l . Li st ;
i mpor t obj et osNegoci o. Medi o;
i mpor t obj et osNegoci o. Pel i cul a;

/ **
* Est a cl ase per mi t e consul t ar pel cul as del pr ogr ama Amant eMusi ca
* Los dat os se al macenan en una l i st a del t i po Ar r ayLi st .
*
* @aut hor mdomi t su
*/
publ i c cl ass Pel i cul as ext ends Medi os {
/ / Cr ea l a l i st a par a al macenar l as pel i cul as
pr i vat e Li st <Medi o> pel i cul as;

/ **
* Const r uct or vaci o
*/
publ i c Pel i cul as( ) {
/ / Hace que l a r ef er enci a pel i cul as apunt e a l a l i st a medi os
/ / de l a cl ase Medi os
pel i cul as = medi os;
}
Tema 6 Colecciones 161
ITSON Manuel Domitsu Kono

/ **
* Regr esa l a pel cul a de l a l i st a cuya cl ave coi nci da con l a cl ave
* de l a pel cul a dado por el par met r o
* @par ampel i cul a Pel cul a con l a cl ave de l a pel cul a a r egr esar
* @r et ur n La pel cul a cuya cl ave es i gual a l a cl ave de l a pel cul a
* dada por el par met r o
*/
publ i c Pel i cul a obt en( Pel i cul a pel i cul a) {
/ / Obt i ene l a canci n i nvocando al mt odo obt en( ) de l a cl ase padr e Medi os
r et ur n ( Pel i cul a) super . obt en( pel i cul a) ;
}

/ **
* Regr esa l a l i st a de pel i cul as con el mi smo act or que el par met r o
* @par amact or Act or de l as pel cul as a l i st ar
* @r et ur n La l i st a de pel i cul as con el mi smo act or que el par met r o
*/
publ i c Li st <Pel i cul a> l i st aAct or ( St r i ng act or ) {
Li st <Pel i cul a> l i st a = new Ar r ayLi st <Pel i cul a>( ) ;

/ / Recor r e l a l i st a
f or ( I t er at or <Medi o> i t er ador = pel i cul as. i t er at or ( ) ;
i t er ador . hasNext ( ) ; ) {
Pel i cul a pel i cul a = ( Pel i cul a) i t er ador . next ( ) ;
/ / Si es el act or especi f i cado
i f ( pel i cul a. get Act or 1( ) . equal s( act or ) | |
pel i cul a. get Act or 2( ) . equal s( act or ) )
/ / Agr ega l a pel cul a a l a l i st a
l i st a. add( pel i cul a) ;
}

r et ur n l i st a;
}

/ **
* Regr esa l a l i st a de pel i cul as con el mi smo di r ect or que el par met r o
* @par amdi r et or Di r ect or de l as pel cul as a l i st ar
* @r et ur n La l i st a de pel i cul as con el mi smo di r ect or que el par met r o
*/
publ i c Li st <Pel i cul a> l i st aDi r ect or ( St r i ng di r ect or ) {
Li st <Pel i cul a> l i st a = new Ar r ayLi st <Pel i cul a>( ) ;

/ / Recor r e l a l i st a
f or ( I t er at or <Medi o> i t er ador = pel i cul as. i t er at or ( ) ;
i t er ador . hasNext ( ) ; ) {
Pel i cul a pel i cul a = ( Pel i cul a) i t er ador . next ( ) ;
/ / Si es el di r ect or especi f i cado
i f ( di r ect or . equal s( pel i cul a. get Di r ect or ( ) ) )
/ / Agr ega l a pel cul a a l a l i st a
l i st a. add( pel i cul a) ;
}

r et ur n l i st a;
}
}
162 Colecciones
ITSON Manuel Domitsu Kono

La clase Gener os tiene como atributo una lista de tipo Gener o. Los mtodos de la clase
Gener os permiten buscar un gnero dentro del catlogo dada su clave, agregar,
actualizar y eliminar un gnero al catlogo, listar el catlogo. El cdigo de la clase
Gener os es el siguiente:

Generos.java
/ *
* Gener os. j ava
*/
package dao;

i mpor t j ava. ut i l . Ar r ayLi st ;
i mpor t j ava. ut i l . I t er at or ;
i mpor t j ava. ut i l . Li st ;
i mpor t obj et osNegoci o. Gener o;
i mpor t excepci ones. DAOExcept i on;

/ **
* Est a cl ase per mi t e al macenar , act ual i zar , el i mi nar y consul t ar
* gener os de canci ones y pel cul as del pr ogr ama Amant eMusi ca.
* Los dat os se al macenan en l i st as.
*
* @aut hor mdomi t su
*/
publ i c cl ass Gener os {
pr ot ect ed Li st <Gener o> gener os;

/ **
* Cr ea una l i st a del t i po Ar r ayLi st par a al macenar l os gner os
*/
publ i c Gener os( ) {
/ / Cr ea l a l i st a par a al macenar l os gner os
gener os = new Ar r ayLi st <Gener o>( ) ;
}

/ **
* Regr esa el gener o de l a l i st a que coi nci da con el gener o del par amet r o.
* Las cl aves del gener o de l a l i st a y del par amet r o deben coi nci di r
* @par amgener o Gener o con l a cl ave del gener o a r egr esar
* @r et ur n El gener o cuya cl ave es i gual a l a cl ave del gener o
* dado por el par met r o, si se encuent r a, nul l en caso cont r ar i o
*/
publ i c Gener o obt en( Gener o gener o) {
/ / Busca un gener o con l a mi sma cl ave.
i nt pos = gener os. i ndexOf ( gener o) ;

/ / Si l o encont r , r egr sal o
i f ( pos >= 0) r et ur n gener os. get ( pos) ;

/ / si no, r egr esa nul l
r et ur n nul l ;
}

/ **
Tema 6 Colecciones 163
ITSON Manuel Domitsu Kono
* Agr ega un gener o a l a l i st a de gener os
* @par amgener o Gener o a agr egar .
*/
publ i c voi d agr ega( Gener o gener o) {
/ / Se agr ega el gener o
gener os. add( gener o) ;
}

/ **
* Act ual i za el gener o de l a l i st a que coi nci da con el gener o del par amet r o.
* Las cl aves del gener o dl a l i st a y del par amet r o deben coi nci di r
* @par amgener o Gner o a act ual i zar .
* @t hr ows DAOExcept i on Si el gner o no exi st e.
*/
publ i c voi d act ual i za( Gener o gener o) t hr ows DAOExcept i on {
/ / Busca un gener o con l a mi sma cl ave.
i nt pos = gener os. i ndexOf ( gener o) ;

/ / Si no l o encont r o, no se act ual i za
i f ( pos < 0) t hr ow new DAOExcept i on( "Gner o i nexi st ent e") ;

/ / Si l o hay, act ual i zal o
gener os. set ( pos, gener o) ;
}

/ **
* El i mi na el gener o dl a l i st a que coi nci da con el gener o del par amet r o.
* Las cl aves del gener o dl a l i st a y del par amet r o deben coi nci di r
* @par amgener o Gener o a el i mi nar .
* @t hr ows DAOExcept i on Si el gner o no exi st e.
*/
publ i c voi d el i mi na( Gener o gener o) t hr ows DAOExcept i on {
/ / Si el gener o exi st e se bor r a, en caso cont r ar i o l anza excepci n.
i f ( gener os. r emove( gener o) )
t hr ow new DAOExcept i on( "Gner o i nexi st ent e") ;
}

/ **
* Regr esa una l i st a de t odos l os gner os.
* @r et ur n ULi st a de t odos l os gner os
*/
publ i c Li st <Gener o> l i st a( ) {
r et ur n gener os;
}

/ **
* Cr ea l a l i st a de l os gner os del mi smo medi o que el par met r o
* @par amt i poMedi o Ti po del medi o de l os gner os a l i st ar
* @r et ur n Li st a de l os gner os del mi smo t i po de medi o que el par met r o
*/
publ i c Li st <Gener o> l i st aMedi o( char t i poMedi o) {
Li st <Gener o> l i st a = new Ar r ayLi st <Gener o>( ) ;

/ / Recor r e l a l i st a
f or ( I t er at or <Gener o> i t er ador = gener os. i t er at or ( ) ; i t er ador . hasNext ( ) ; ) {
Gener o gener o = i t er ador . next ( ) ;

164 Colecciones
ITSON Manuel Domitsu Kono
/ / Si es el medi o especi f i cado
i f ( t i poMedi o == gener o. get Ti poMedi o( ) )
/ / Agr ega el medi o a l a l i st a
l i st a. add( gener o) ;
}

r et ur n l i st a;
}
}
Diseo en Capas y la Fachada de la Capa de
Persistencia

En el Tema 4: Excepciones, se habl del diseo en capas. Las clases Medi os,
Canci ones y Pel i cul as que emplean listas para almacenar objetos de tipo
Canci on, Pel i cul a y Gener o en el programa sobre el Amante de la Msica y del
Cine conforman la capa inferior de la aplicacin y en este tipo de aplicaciones puede
suceder lo siguiente:

La capa superior de la aplicacin slo va a acceder a una parte de los mtodos
de una capa inferior y desearamos que el desarrollador de la capa superior slo
tuviera acceso a los mtodos que necesita, as no tendr que preocuparse por el
resto de mtodos que no requiere.
La capa superior de la aplicacin requiere de ciertas transacciones que
involucren varios mtodos de las clases de la capa inferior. Por ejemplo,
podramos tener una restriccin de que no se permiten claves repetidas en las
listas de canciones o pelculas. El mtodo para agregar un medio en la clase
medio no nos proporciona la verificacin.
Los datos que se desean almacenar pueden utilizar diferentes mecanismos, por
ejemplo listas, archivos y base de datos. Aunque en una aplicacin real
almacenar los datos en listas no es una solucin adecuada ya que las listas se
crean en la memoria RAM de la computadora y al salir de la aplicacin o al
apagarse la computadora se destruyen, perdindose su informacin.

Como solucin a los problemas anteriores podramos construir una capa intermedia
que tuviera uno o ms mdulos, cada uno se encargar de lo siguiente:

Mostrar slo los mtodos de la capa inferior que la capa superior requiere.
Manejar las transacciones.
Ocultarle a la capa superior el mecanismo empleado para almacenar los datos,
proporcionndole a la capa superior el mismo mecanismo para acceder a los
datos independientemente de cmo se almacenan los datos. Esto permite
modificar o sustituir los mtodos de la capa inferior sin que le afecte a la capa
superior.
Tema 6 Colecciones 165
ITSON Manuel Domitsu Kono
Traducir los mensajes de errores de la capa inferior a mensajes ms amigables
para la capa superior, conservando la informacin de los errores para fines de
depuracin.

A los mdulos que realizan las tareas anteriores se conocen como Fachadas. Cada
fachada estar formada por:

Una interfaz que establezca qu mtodos de la capa inferior mostrar la fachada
Una o ms clases que implementen la fachada anterior. Una para cada
mecanismo de almacenamiento.
Una Excepcin que envolver a las excepciones de la capa inferior.

El diagrama de clases de la figura 6.5 muestra la interfaz y la fachada que implementa
los mtodos declarados por la interfaz para programa sobre el amante de la msica y el
cine, cuando el almacenamiento de los datos es en listas:

Figura 6.5 Fachada de la Capa de Persistencia del Programa AmanteMusica,
Versin Listas

El siguiente cdigo muestra la clase Per si st enci aExcept i on que ser la excepcin
que envuelva las excepciones de la capa inferior del programa sobre el amante de la
msica:
166 Colecciones
ITSON Manuel Domitsu Kono
PersistenciaException.java
/ *
* Per si st enci aExcept i on. j ava
*/
package excepci ones;

/ **
* Est a cl ase r epr esent a a l as excepci ones l anzadas por l a f achada
* de l a Capa de Per si st enci a y envuel ve a l as excepci ones l anzadas
* por l as cl ases que encapsul an l a per si st enci a.
*
* @aut hor mdomi t su
*/
publ i c cl ass Per si st enci aExcept i on ext ends Runt i meExcept i on {
/ **
* Const r uye una excepci n con un mensaj e de er r or nul o.
*/
publ i c Per si st enci aExcept i on( ) {
}

/ **
* Const r uye una excepci n con el mensaj e de er r or del par met r o.
* @par ammsj Mensaj e de er r or .
*/
publ i c Per si st enci aExcept i on( St r i ng msj ) {
super ( msj ) ;
}

/ **
* Const r uye una excepci n con el mensaj e de er r or del par met r o y l a causa
* or i gi nal del er r or .
* @par ammsj Mensaj e de er r or .
* @par amcausa Causa or i gi nal del er r or .
*/
publ i c Per si st enci aExcept i on( St r i ng msj , Thr owabl e causa) {
super ( msj , causa) ;
}

/ **
* Const r uye una excepci n l a causa or i gi nal del er r or .
* @par amcausa Causa or i gi nal del er r or .
*/
publ i c Per si st enci aExcept i on( Thr owabl e causa) {
super ( causa) ;
}
}

El siguiente cdigo muestra la interfaz de la fachada de la capa de persistencia,
I Per si st enci a, de la capa inferior del programa sobre el amante de la msica:

IPersistencia. java
/ *
* I Per si st enci a. j ava
*/
package i nt er f aces;
Tema 6 Colecciones 167
ITSON Manuel Domitsu Kono

i mpor t j ava. ut i l . Li st ;
i mpor t obj et osSer vi ci o. *;
i mpor t obj et osNegoci o. *;
i mpor t excepci ones. Per si st enci aExcept i on;

/ **
* Est a I nt er f az est abl ece l os mt odos que deben i mpl ement ar l as cl ases
* que encapsul en el mecani smo de per si st enci a del pr ogr ama Amant eMusi ca
*
* @aut hor mdomi t su
*/
publ i c i nt er f ace I Per si st enci a {
/ **
* Obt i ene una canci n del cat l ogo de canci ones
* @par amcanci on Canci on a obt ener
* @r et ur n La canci n si exi st e, nul l en caso cont r ar i o
* @t hr ows Per si st enci aExcept i on Si no se puede acceder al
* cat l ogo de canci ones.
*/
publ i c Canci on obt en( Canci on canci on) t hr ows Per si st enci aExcept i on;

/ **
* Agr ega una canci n al cat l ogo de canci ones. No se per mi t en canci ones
* con cl aves r epet i das
* @par amcanci on Canci on a agr egar
* @t hr ows Per si st enci aExcept i on Si no se puede agr egar l a canci n al
* cat l ogo de canci ones.
*/
publ i c voi d agr ega( Canci on canci on) t hr ows Per si st enci aExcept i on;

/ **
* Act ual i za una canci n del cat l ogo de canci ones
* @par amcanci on Canci on a act ual i zar
* @t hr ows Per si st enci aExcept i on Si no se puede act ual i zar l a canci n del
* cat l ogo de canci ones.
*/
publ i c voi d act ual i za( Canci on canci on) t hr ows Per si st enci aExcept i on;

/ **
* El i mi na una canci n del cat l ogo de canci ones
* @par amcanci on Canci on a el i mi nar
* @t hr ows Per si st enci aExcept i on Si no se puede el i mi nar l a canci n del
* cat l ogo de canci ones.
*/
publ i c voi d el i mi na( Canci on canci on) t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una pel cul a del cat l ogo de pel i cul as
* @par ampel i cul a Pel i cul a a obt ener
* @r et ur n La pel cul a si exi st e, nul l en caso cont r ar i o
* @t hr ows Per si st enci aExcept i on Si no se puede acceder al
* cat l ogo de pel cul as.
*/
publ i c Pel i cul a obt en( Pel i cul a pel i cul a) t hr ows Per si st enci aExcept i on;

/ **
168 Colecciones
ITSON Manuel Domitsu Kono
* Agr ega una pel cul a al cat l ogo de pel i cul as. No se per mi t en pel cul as
* con cl aves r epet i das
* @par ampel i cul a Pel i cul a a agr egar
* @t hr ows Per si st enci aExcept i on Si no se puede agr egar l a pel cul a al
* cat l ogo de pel cul as.
*/
publ i c voi d agr ega( Pel i cul a pel i cul a) t hr ows Per si st enci aExcept i on;

/ **
* Act ual i za una pel cul a del cat l ogo de pel i cul as
* @par ampel i cul a Pel i cul a a act ual i zar
* @t hr ows Per si st enci aExcept i on Si no se puede act ual i zar l a pel cul a del
* cat l ogo de pel cul as.
*/
publ i c voi d act ual i za( Pel i cul a pel i cul a) t hr ows Per si st enci aExcept i on;

/ **
* El i mi na una pel cul a del cat l ogo de pel i cul as
* @par ampel i cul a Pel i cul a a el i mi nar
* @t hr ows Per si st enci aExcept i on Si no se puede el i mi nar l a pel cul a del
* cat l ogo de pel cul as.
*/
publ i c voi d el i mi na( Pel i cul a pel i cul a) t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene un gner o del cat l ogo de gner os
* @par amgener o Gner o a obt ener
* @r et ur n El gner o si exi st e, nul l en caso cont r ar i o
* @t hr ows Per si st enci aExcept i on Si no se puede acceder al
* cat l ogo de gner os.
*/
publ i c Gener o obt en( Gener o gener o) t hr ows Per si st enci aExcept i on;

/ **
* Agr ega un gner o al cat l ogo de gner os. No se per mi t en gner os
* con cl aves r epet i das
* @par amgener o Gner o a agr egar
* @t hr ows Per si st enci aExcept i on Si no se puede agr egar el gner o al
* cat l ogo de gner os.
*/
publ i c voi d agr ega( Gener o gener o) t hr ows Per si st enci aExcept i on;

/ **
* Act ual i za un gner o del cat l ogo de gner os
* @par amgener o Gner o a act ual i zar
* @t hr ows Per si st enci aExcept i on Si no se puede act ual i zar el gner o del
* cat l ogo de gner os.
*/
publ i c voi d act ual i za( Gener o gener o) t hr ows Per si st enci aExcept i on;

/ **
* El i mi na un gner o del cat l ogo de gner os
* @par amgener o Gner o a el i mi nar
* @t hr ows Per si st enci aExcept i on Si no se puede el i mi nar el gner o del
* cat l ogo de gner os.
*/
publ i c voi d el i mi na( Gener o gener o) t hr ows Per si st enci aExcept i on;
Tema 6 Colecciones 169
ITSON Manuel Domitsu Kono

/ **
* Obt i ene una l i st a de t odas l as canci ones
* @r et ur n Li st a de t odas l as canci ones
* @t hr ows Per si st enci aExcept i on Si hay un pr obl ema al acceder al cat l ogo
* de canci ones
*/
publ i c Li st <Canci on> consul t aCanci ones( ) t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo t t ul o.
* @par amt i t ul o Ti t ul o de l as canci ones de l a l i st a
* @r et ur n Li st a de t odas l as canci ones con el mi smo t t ul o.
* @t hr ows Per si st enci aExcept i on Si hay un pr obl ema al acceder al cat l ogo
* de canci ones
*/
publ i c Li st <Canci on> consul t aCanci onesTi t ul o( St r i ng t i t ul o)
t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo i nt r pr et e.
* @par ami nt er pr et e I nt r pr et e de l as canci ones de l a l i st a
* @r et ur n Li st a de t odas l as canci ones con el mi smo i nt r pr et e.
* @t hr ows Per si st enci aExcept i on Si hay un pr obl ema al acceder al cat l ogo
* de canci ones
*/
publ i c Li st <Canci on> consul t aCanci onesI nt er pr et e( St r i ng i nt er pr et e)
t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo aut or .
* @par amaut or Aut or de l as canci ones de l a l i st a
* @r et ur n Li st a de t odas l as canci ones con el mi smo aut or .
* @t hr ows Per si st enci aExcept i on Si hay un pr obl ema al acceder al cat l ogo
* de canci ones
*/
publ i c Li st <Canci on> consul t aCanci onesAut or ( St r i ng aut or )
t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo gner o.
* @par amcveGener o Cl ave del gner o de l as canci ones de l a l i st a
* @r et ur n Li st a de t odas l as canci ones con el mi smo gner o.
* @t hr ows Per si st enci aExcept i on Si hay un pr obl ema al acceder al cat l ogo
* de canci ones
*/
publ i c Li st <Canci on> consul t aCanci onesGener o( St r i ng cveGener o)
t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una l i st a de t odas l as canci ones del mi smo l bum.
* @par amal buml bumde l as canci ones de l a l i st a
* @r et ur n Li st a de t odas l as canci ones del mi smo l bum.
* @t hr ows Per si st enci aExcept i on Si hay un pr obl ema al acceder al cat l ogo
* de canci ones
*/
publ i c Li st <Canci on> consul t aCanci onesAl bum( St r i ng al bum)
170 Colecciones
ITSON Manuel Domitsu Kono
t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una l i st a de t odas l as canci ones del mi smo per i odo.
* @par amper i odo Per odo de l as canci ones de l a l i st a
* @r et ur n Li st a de t odas l as canci ones del mi smo per odo.
* @t hr ows Per si st enci aExcept i on Si hay un pr obl ema al acceder al cat l ogo
* de canci ones
*/
publ i c Li st <Canci on> consul t aCanci onesPer i odo( Per i odo per i odo)
t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una l i st a de t odas l as pel cul as
* @r et ur n Li st a de t odas l as pel cul as.
* @t hr ows Per si st enci aExcept i on Si hay un pr obl ema al acceder al cat l ogo
* de pel cul as
*/
publ i c Li st <Pel i cul a> consul t aPel i cul as( ) t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo t t ul o
* @par amt i t ul o T t ul o de l as pel cul as de l a l i st a
* @r et ur n Li st a de t odas l as pel i cul as del mi smo t t ul o.
* @t hr ows Per si st enci aExcept i on Si hay un pr obl ema al acceder al cat l ogo
* de pel cul as
*/
publ i c Li st <Pel i cul a> consul t aPel i cul asTi t ul o( St r i ng t i t ul o)
t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo act or
* @par amact or Act or de l as pel i cul as de l a l i st a
* @r et ur n Li st a de t odas l as pel i cul as del mi smo act or .
* @t hr ows Per si st enci aExcept i on Si hay un pr obl ema al acceder al cat l ogo
* de pel cul as
*/
publ i c Li st <Pel i cul a> consul t aPel i cul asAct or ( St r i ng act or )
t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo di r ect or
* @par amdi r ect or Di r ect or de l as pel i cul as de l a l i st a
* @r et ur n Li st a de t odas l as pel i cul as del mi smo di r ect or .
* @t hr ows Per si st enci aExcept i on Si hay un pr obl ema al acceder al cat l ogo
* de pel cul as
*/
publ i c Li st <Pel i cul a> consul t aPel i cul asDi r ect or ( St r i ng di r ect or )
t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo gner o
* @par amcveGener o Cl ave del gner o de l as pel i cul as de l a l i st a
* @r et ur n Li st a de t odas l as pel i cul as del mi smo gner o.
* @t hr ows Per si st enci aExcept i on Si hay un pr obl ema al acceder al cat l ogo
* de pel cul as
*/
Tema 6 Colecciones 171
ITSON Manuel Domitsu Kono
publ i c Li st <Pel i cul a> consul t aPel i cul asGener o( St r i ng cveGener o)
t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo per i odo
* @par amper i odo Per i odo de l as pel i cul as de l a l i st a
* @r et ur n Li st a de t odas l as pel i cul as del mi smo per i odo.
* @t hr ows Per si st enci aExcept i on Si hay un pr obl ema al acceder al cat l ogo
* de pel cul as
*/
publ i c Li st <Pel i cul a> consul t aPel i cul asPer i odo( Per i odo per i odo)
t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una l i st a de t odos l os gner os
* @r et ur n Li st a de t odos l os gner os.
* @t hr ows Per si st enci aExcept i on Si no se puede acceder al cat l ogo
* de gner os.
*/
publ i c Li st <Gener o> consul t aGener os( ) t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una l i st a de l os gner os de canci ones
* @r et ur n Li st a de l os gner os canci ones
* @t hr ows Per si st enci aExcept i on Si no se puede acceder al cat l ogo
* de gner os.
*/
publ i c Li st <Gener o> consul t aGener osCanci ones( )
t hr ows Per si st enci aExcept i on;

/ **
* Obt i ene una l i st a de l os gner os de pel cul as
* @r et ur n Li st a de l os gner os pel cul as
* @t hr ows Per si st enci aExcept i on Si no se puede acceder al cat l ogo
* de gner os.
*/
publ i c Li st <Gener o> consul t aGener osPel i cul as( )
t hr ows Per si st enci aExcept i on;
}

El siguiente cdigo muestra la clase Per si st enci aLi st as que implementa la
fachada de la capa de persistencia del programa sobre el amante de la msica, cuando
el almacenamiento de los datos es en listas. Esta clase implementa la interfaz
I Per si st enci a. Hay que notar que aunque en la interfaz I Per si st enci a se
declararon que todos los mtodos lanzan una excepcin del tipo
Per si st enci aExcept i on, en las implementaciones de los mtodos no se requiere
que los mtodos declaren ni lancen la excepcin.

PersistenciaListas.java
/ *
* Per si st enci aLi st as. j ava
*/

package per si st enci a;
172 Colecciones
ITSON Manuel Domitsu Kono

i mpor t j ava. ut i l . Li st ;
i mpor t obj et osSer vi ci o. *;
i mpor t obj et osNegoci o. *;
i mpor t excepci ones. *;
i mpor t i nt er f aces. I Per si st enci a;
i mpor t per si st enci a. *;

/ **
* Est a cl ase i mpl ement a l a i nt er f az I Per si st enci a del mecani smo de
* per si st enci a de l i st as del pr ogr ama Amant eMusi ca
*
* @aut hor mdomi t su
*/
publ i c cl ass Per si st enci aLi st as i mpl ement s I Per si st enci a {
pr i vat e Gener os cat al ogoGener os;
pr i vat e Canci ones cat al ogoCanci ones;
pr i vat e Pel i cul as cat al ogoPel i cul as;

/ **
* Est e const r uct or cr ea l os obj et os con l os l i st as par a
* al macenar l os gner os, canci ones y pel cul as
*/
publ i c Per si st enci aLi st as( ) {
/ / Cr ea un obj et o del t i po Gener os par a accesar a l a t abl a canci ones
cat al ogoGener os = new Gener os( ) ;

/ / Cr ea un obj et o del t i po Canci ones par a accesar a l a t abl a canci ones
cat al ogoCanci ones = new Canci ones( ) ;

/ / Cr ea un obj et o del t i po Pel i cul as par a accesar a l a t abl a pel i cul as
cat al ogoPel i cul as = new Pel i cul as( ) ;
}

/ **
* Obt i ene una canci n del cat l ogo de canci ones
* @par amcanci on Canci on a obt ener
* @r et ur n La canci n si exi st e, nul l en caso cont r ar i o
*/
publ i c Canci on obt en( Canci on canci on) {
/ / Obt en l a canci n
r et ur n cat al ogoCanci ones. obt en( canci on) ;
}

/ **
* Agr ega una canci n al cat l ogo de canci ones. No se per mi t en canci ones
* con cl aves r epet i das
* @par amcanci on Canci on a agr egar
* @t hr ows Per si st enci aExcept i on Si no se puede agr egar l a canci n al
* cat l ogo de canci ones.
*/
publ i c voi d agr ega( Canci on canci on) t hr ows Per si st enci aExcept i on {
Canci on canci onBuscada;

/ / Busca l a canci n en el l i st a con l a mi sma cl ave.
canci onBuscada = cat al ogoCanci ones. obt en( canci on) ;

Tema 6 Colecciones 173
ITSON Manuel Domitsu Kono
/ / Si l o hay, no se agr ega a l a l i st a
i f ( canci onBuscada ! = nul l )
t hr ow new Per si st enci aExcept i on( " Canci n r epet i da" ) ;

/ / Agr ega l a nueva canci n al cat l ogo
cat al ogoCanci ones. agr ega( canci on) ;
}

/ **
* Act ual i za una canci n del cat l ogo de canci ones
* @par amcanci on Canci on a act ual i zar
* @t hr ows Per si st enci aExcept i on Si no se puede act ual i zar l a canci n del
* cat l ogo de canci ones.
*/
publ i c voi d act ual i za( Canci on canci on) t hr ows Per si st enci aExcept i on {
t r y {
/ / Act ual i za l a canci n del cat l ogo
cat al ogoCanci ones. act ual i za( canci on) ;
}
cat ch( DAOExcept i on pae) {
t hr ow new Per si st enci aExcept i on( " No se puede act ual i zar l a canci n" ,
pae) ;
}
}

/ **
* El i mi na una canci n del cat l ogo de canci ones
* @par amcanci on Canci on a el i mi nar
* @t hr ows Per si st enci aExcept i on Si no se puede el i mi nar l a canci n del
* cat l ogo de canci ones.
*/
publ i c voi d el i mi na( Canci on canci on) t hr ows Per si st enci aExcept i on {
/ / El i mi na l a canci n del cat l ogo
t r y {
cat al ogoCanci ones. el i mi na( canci on) ;
}
cat ch( DAOExcept i on pae) {
t hr ow new Per si st enci aExcept i on( " No se puede el i mi nar l a canci n" ,
pae) ;
}
}

/ **
* Obt i ene una pel cul a del cat l ogo de pel i cul as
* @par ampel i cul a Pel i cul a a obt ener
* @r et ur n La pel cul a si exi st e, nul l en caso cont r ar i o
*/
publ i c Pel i cul a obt en( Pel i cul a pel i cul a) {
/ / Obt en l a pel cul a
r et ur n cat al ogoPel i cul as. obt en( pel i cul a) ;
}

/ **
* Agr ega una pel cul a al cat l ogo de pel i cul as. No se per mi t en pel cul as
* con cl aves r epet i das
* @par ampel i cul a Pel i cul a a agr egar
* @t hr ows Per si st enci aExcept i on Si no se puede agr egar l a pel cul a al
174 Colecciones
ITSON Manuel Domitsu Kono
* cat l ogo de pel cul as.
*/
publ i c voi d agr ega( Pel i cul a pel i cul a) t hr ows Per si st enci aExcept i on {
Pel i cul a pel i cul aBuscada;

/ / Busca l a pel cul a en l a l i st a con l a mi sma cl ave.
pel i cul aBuscada = cat al ogoPel i cul as. obt en( pel i cul a) ;

/ / Si l o hay, no se agr ega a l a l i st a
i f ( pel i cul aBuscada ! = nul l )
t hr ow new Per si st enci aExcept i on( " Pel cul a r epet i da" ) ;

/ / Agr ega l a nueva pel cul a al cat l ogo
cat al ogoPel i cul as. agr ega( pel i cul a) ;
}

/ **
* Act ual i za una pel cul a del cat l ogo de pel i cul as
* @par ampel i cul a Pel i cul a a act ual i zar
* @t hr ows Per si st enci aExcept i on Si no se puede act ual i zar l a pel cul a del
* cat l ogo de pel cul as.
*/
publ i c voi d act ual i za( Pel i cul a pel i cul a) t hr ows Per si st enci aExcept i on {
/ / Act ual i za l a pel cul a del cat l ogo
t r y {
cat al ogoPel i cul as. act ual i za( pel i cul a) ;
}
cat ch( DAOExcept i on pae) {
t hr ow new Per si st enci aExcept i on( " No se puede act ual i zar l a pel cul a" ,
pae) ;
}
}

/ **
* El i mi na una pel cul a del cat l ogo de pel i cul as
* @par ampel i cul a Pel i cul a a el i mi nar
* @t hr ows Per si st enci aExcept i on Si no se puede el i mi nar l a pel cul a del
* cat l ogo de pel cul as.
*/
publ i c voi d el i mi na( Pel i cul a pel i cul a) t hr ows Per si st enci aExcept i on {
/ / El i mi na l a pel cul a del cat l ogo
t r y {
cat al ogoPel i cul as. el i mi na( pel i cul a) ;
}
cat ch( DAOExcept i on pae) {
t hr ow new Per si st enci aExcept i on( " No se puede el i mi nar l a pel cul a" ,
pae) ;
}
}

/ **
* Obt i ene un gner o del cat l ogo de gner os
* @par amgener o Gner o a obt ener
* @r et ur n El gner o si exi st e, nul l en caso cont r ar i o
* @t hr ows Per si st enci aExcept i on Si no se puede acceder al
* cat l ogo de gner os.
*/
Tema 6 Colecciones 175
ITSON Manuel Domitsu Kono
publ i c Gener o obt en( Gener o gener o) t hr ows Per si st enci aExcept i on {
/ / Obt en el gner o
r et ur n cat al ogoGener os. obt en( gener o) ;
}

/ **
* Agr ega un gner o al cat l ogo de gner os. No se per mi t en gner os
* con cl aves r epet i das
* @par amgener o Gner o a agr egar
* @t hr ows Per si st enci aExcept i on Si no se puede agr egar el gner o al
* cat l ogo de gner os.
*/
publ i c voi d agr ega( Gener o gener o) t hr ows Per si st enci aExcept i on {
Gener o gener oBuscado;

/ / Busca el gner o en l a l i st a con l a mi sma cl ave.
gener oBuscado = cat al ogoGener os. obt en( gener o) ;

/ / Si l o hay, no se agr ega a l a l i st a
i f ( gener oBuscado ! = nul l )
t hr ow new Per si st enci aExcept i on( " Gner o r epet i do" ) ;

/ / Agr ega el nuevo gner o al cat l ogo
cat al ogoGener os. agr ega( gener o) ;
}

/ **
* Act ual i za un gner o del cat l ogo de gner os
* @par amgener o Gner o a act ual i zar
* @t hr ows Per si st enci aExcept i on Si no se puede act ual i zar el gner o del
* cat l ogo de gner os.
*/
publ i c voi d act ual i za( Gener o gener o) t hr ows Per si st enci aExcept i on {
/ / Act ual i za el gner o del cat l ogo
t r y {
cat al ogoGener os. act ual i za( gener o) ;
}
cat ch( DAOExcept i on pae) {
t hr ow new Per si st enci aExcept i on( " No se puede act ual i zar el gner o" ,
pae) ;
}
}

/ **
* El i mi na un gner o del cat l ogo de gner os
* @par amgener o Gner o a el i mi nar
* @t hr ows Per si st enci aExcept i on Si no se puede el i mi nar el gner o del
* cat l ogo de gner os.
*/
publ i c voi d el i mi na( Gener o gener o) t hr ows Per si st enci aExcept i on {
/ / El i mi na el gner o del cat l ogo
t r y {
cat al ogoGener os. el i mi na( gener o) ;
}
cat ch( DAOExcept i on pae) {
t hr ow new Per si st enci aExcept i on( " No se puede el i mi nar el gner o" , pae) ;
}
176 Colecciones
ITSON Manuel Domitsu Kono
}

/ **
* Obt i ene una l i st a t odas l as canci ones
* @r et ur n Li st a con l a l i st a de t odas l as canci ones
*/
publ i c Li st <Canci on> consul t aCanci ones( ) {
/ / Regr esa el vect or con l a l i st a de canci ones
r et ur n cat al ogoCanci ones. l i st a( ) ;
}

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo t t ul o.
* @par amt i t ul o Ti t ul o de l as canci ones de l a l i st a
* @r et ur n Li st a con l a l i st a de t odas l as canci ones con el mi smo
* t t ul o.
*/
publ i c Li st <Canci on> consul t aCanci onesTi t ul o( St r i ng t i t ul o) {
/ / Regr esa el vect or con l a l i st a de canci ones
r et ur n cat al ogoCanci ones. l i st aTi t ul o( t i t ul o) ;
}

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo i nt r pr et e.
* @par ami nt er pr et e I nt r pr et e de l as canci ones de l a l i st a
* @r et ur n Li st a con l a l i st a de t odas l as canci ones con el mi smo
* i nt r pr et e.
*/
publ i c Li st <Canci on> consul t aCanci onesI nt er pr et e( St r i ng i nt er pr et e) {
/ / Regr esa el vect or con l a l i st a de canci ones
r et ur n cat al ogoCanci ones. l i st aI nt er pr et e( i nt er pr et e) ;
}

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo aut or .
* @par amaut or Aut or de l as canci ones de l a l i st a
* @r et ur n Li st a con l a l i st a de t odas l as canci ones con el mi smo aut or .
*/
publ i c Li st <Canci on> consul t aCanci onesAut or ( St r i ng aut or ) {
/ / Obt i ene el vect or con l a l i st a de canci ones
r et ur n cat al ogoCanci ones. l i st aAut or ( aut or ) ;
}

/ **
* Obt i ene una l i st a de t odas l as canci ones con el mi smo gner o.
* @par amcveGener o Cl ave del gner o de l as canci ones de l a l i st a
* @r et ur n Li st a con l a l i st a de t odas l as canci ones con el mi smo
* gner o.
*/
publ i c Li st <Canci on> consul t aCanci onesGener o( St r i ng cveGener o) {
/ / Regr esa el vect or con l a l i st a de canci ones
r et ur n cat al ogoCanci ones. l i st aGener o( cveGener o) ;
}

/ **
* Obt i ene una l i st a de t odas l as canci ones del mi smo l bum.
* @par amal buml bumde l as canci ones de l a l i st a
Tema 6 Colecciones 177
ITSON Manuel Domitsu Kono
* @r et ur n Li st a con l a l i st a de t odas l as canci ones del mi smo l bum.
*/
publ i c Li st <Canci on> consul t aCanci onesAl bum( St r i ng al bum) {
/ / Regr esa el vect or con l a l i st a de canci ones
r et ur n cat al ogoCanci ones. l i st aAl bum( al bum) ;
}

/ **
* Obt i ene una l i st a de t odas l as canci ones del mi smo per i odo.
* @par amper i odo Per odo de l as canci ones de l a l i st a
* @r et ur n Li st a con l a l i st a de t odas l as canci ones del mi smo per odo.
*/
publ i c Li st <Canci on> consul t aCanci onesPer i odo( Per i odo per i odo) {
/ / Regr esa el vect or con l a l i st a de canci ones
r et ur n cat al ogoCanci ones. l i st aPer i odo( per i odo) ;
}

/ **
* Obt i ene una l i st a de t odas l as pel cul as
* @r et ur n Li st a con l a l i st a de t odas l as pel cul as.
*/
publ i c Li st <Pel i cul a> consul t aPel i cul as( ) {
/ / Regr esa el vect or con l a l i st a de pel i cul as
r et ur n cat al ogoPel i cul as. l i st a( ) ;
}

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo t t ul o
* @par amt i t ul o T t ul o de l as pel cul as de l a l i st a
* @r et ur n Li st a con l a l i st a de t odas l as pel i cul as del mi smo t t ul o.
*/
publ i c Li st <Pel i cul a> consul t aPel i cul asTi t ul o( St r i ng t i t ul o) {
/ / Regr esa el vect or con l a l i st a de pel i cul as
r et ur n cat al ogoPel i cul as. l i st aTi t ul o( t i t ul o) ;
}

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo act or
* @par amact or Act or de l as pel i cul as de l a l i st a
* @r et ur n Li st a con l a l i st a de t odas l as pel i cul as del mi smo act or .
*/
publ i c Li st <Pel i cul a> consul t aPel i cul asAct or ( St r i ng act or ) {
/ / Regr esa el vect or con l a l i st a de pel i cul as
r et ur n cat al ogoPel i cul as. l i st aAct or ( act or ) ;
}

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo di r ect or
* @par amdi r ect or Di r ect or de l as pel i cul as de l a l i st a
* @r et ur n Li st a con l a l i st a de t odas l as pel i cul as del mi smo di r ect or .
*/
publ i c Li st <Pel i cul a> consul t aPel i cul asDi r ect or ( St r i ng di r ect or ) {
/ / Regr esa el vect or con l a l i st a de pel i cul as
r et ur n cat al ogoPel i cul as. l i st aDi r ect or ( di r ect or ) ;
}

/ **
178 Colecciones
ITSON Manuel Domitsu Kono
* Obt i ene una l i st a de t odas l as pel cul as del mi smo gner o
* @par amcveGener o Cl ave del gner o de l as pel i cul as de l a l i st a
* @r et ur n Li st a con l a l i st a de t odas l as pel i cul as del mi smo gner o.
*/
publ i c Li st <Pel i cul a> consul t aPel i cul asGener o( St r i ng cveGener o) {
/ / Regr esa el vect or con l a l i st a de pel i cul as
r et ur n cat al ogoPel i cul as. l i st aGener o( cveGener o) ;
}

/ **
* Obt i ene una l i st a de t odas l as pel cul as del mi smo per i odo
* @par amper i odo Per i odo de l as pel i cul as de l a l i st a
* @r et ur n Li st a con l a l i st a de t odas l as pel i cul as del mi smo per i odo.
*/
publ i c Li st <Pel i cul a> consul t aPel i cul asPer i odo( Per i odo per i odo) {
/ / Regr esa el vect or con l a l i st a de pel i cul as
r et ur n cat al ogoPel i cul as. l i st aPer i odo( per i odo) ;
}

/ **
* Obt i ene una l i st a de t odos l os gner os
* @r et ur n Li st a con l a l i st a de t odos l os gner os.
*/
publ i c Li st <Gener o> consul t aGener os( ) {
/ / Regr esa el vect or con l a l i st a de gner os
r et ur n cat al ogoGener os. l i st a( ) ;
}

/ **
* Obt i ene una l i st a de l os gner os de canci ones
* @r et ur n Li st a con l a l i st a de l os gner os canci ones
*/
publ i c Li st <Gener o> consul t aGener osCanci ones( ) {
/ / Regr esa el vect or con l a l i st a de gner os de canci ones
r et ur n cat al ogoGener os. l i st aMedi o( ' C' ) ;
}

/ **
* Obt i ene una l i st a de l os gner os de pel cul as
* @r et ur n Li st a con l a l i st a de l os gner os pel cul as
*/
publ i c Li st <Gener o> consul t aGener osPel i cul as( ) {
/ / Regr esa el vect or con l a l i st a de gner os de pel cul as
r et ur n cat al ogoGener os. l i st aMedi o( ' P' ) ;
}
}

La siguiente clase es utilizada para probar la clase Per si st enci aLi st as del programa
sobre el amante de la msica y el cine. En el mtodo mai n( ) de esta clase se crean una
instancia de la clase Per si st enci aLi st as y se le asigna una referencia del tipo de la
interfaz IPersistencia, esto es vlido ya que se considera que cualquier clase que
implementa una interfaz es del tipo de la interfaz. La clase Per si st enci aLi st as oculta
el mecanismo de almacenamiento que son listas y slo deja ver las operaciones para
Tema 6 Colecciones 179
ITSON Manuel Domitsu Kono
agregar, actualizar, eliminar canciones y pelculas. Se listan los catlogos o se hacen
listas parciales

Prueba3.java
/ *
* Pr ueba3. j ava
*/
package pr uebas;

i mpor t j ava. ut i l . Li st ;
i mpor t obj et osSer vi ci o. *;
i mpor t obj et osNegoci o. *;
i mpor t excepci ones. Per si st enci aExcept i on;
i mpor t i nt er f aces. I Per si st enci a;
i mpor t per si st enci a. Per si st enci aLi st as;

/ **
* Est a cl ase se ut i l i za par a pr obar l a cl ase FachadaAr r egl os
*
* @aut hor mdomi t su
*/
publ i c cl ass Pr ueba3 {

/ **
* Mt odo mai n( ) en el que se i nvocan a l os mt odos de l a cl ase
* FachadaAr r egl os par a pr obar l os
* @par amar gs t he command l i ne ar gument s
*/
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) {
Pr ueba3 pr ueba3 = new Pr ueba3( ) ;

/ / Cr ean l a f achada de l os obj et os que per mi t en al macenar l as
/ / canci ones y pel i cul as en ar r egl os
I Per si st enci a f achada = new Per si st enci aLi st as( ) ;
Li st <Gener o> l i st aGener os;
Li st <Canci on> l i st aCanci ones;
Li st <Pel i cul a> l i st aPel i cul as;
Gener o gener o = nul l ;
Canci on canci on = nul l ;

/ / Se agr ega el gner o 1 al cat l ogo de gner os
t r y {
f achada. agr ega( new Gener o( " GCB0001" , " Bal ada" , ' C' ) ) ;
Syst em. out . pr i nt l n( " Se agr ego el gner o 1 al cat l ogo de gner os" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 1" ) ;
}

/ / Se agr ega el gner o 2 al cat l ogo de gner os
t r y {
f achada. agr ega( new Gener o( " GCB0002" , " Bossanova" , ' C' ) ) ;
Syst em. out . pr i nt l n( " Se agr ego el gner o 2 al cat l ogo de gner os" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 2" ) ;
180 Colecciones
ITSON Manuel Domitsu Kono
}

/ / Se agr ega el gner o 3 al cat l ogo de gner os
t r y {
f achada. agr ega( new Gener o( " GCR0003" , " Rock" , ' C' ) ) ;
Syst em. out . pr i nt l n( " Se agr ego el gner o 3 al cat l ogo de gner os" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 3" ) ;
}

/ / Se agr ega de nuevo el gner o 1 al cat l ogo de gner os
t r y {
f achada. agr ega( new Gener o( " GCB0001" , " Bal ada" , ' C' ) ) ;
Syst em. out . pr i nt l n( " Se agr ego el gner o 1 al cat l ogo de gner os" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 1" ) ;
}

/ / Se agr ega el gner o 4 al cat l ogo de gner os
t r y {
f achada. agr ega( new Gener o( " GPD0001" , " Dr ama" , ' P' ) ) ;
Syst em. out . pr i nt l n( " Se agr ego el gner o 4 al cat l ogo de gner os" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 4" ) ;
}

/ / Se agr ega el gner o 5 al cat l ogo de gner os
t r y {
f achada. agr ega( new Gener o( " GPC0002" , " Ci enci a Fi cci n" , ' P' ) ) ;
Syst em. out . pr i nt l n( " Se agr ego el gner o 5 al cat l ogo de gner os" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 5" ) ;
}

/ / Se agr ega el gner o 6 al cat l ogo de gner os
t r y {
f achada. agr ega( new Gener o( " GPC0003" , " Comedi a" , ' P' ) ) ;
Syst em. out . pr i nt l n( " Se agr ego el gner o 6 al cat l ogo de gner os" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 6" ) ;
}

/ / Despl i ega el cont eni do del cat al ogo de gner os
Syst em. out . pr i nt l n( " Li st a de gner os" ) ;
t r y {
l i st aGener os = f achada. consul t aGener os( ) ;
Syst em. out . pr i nt l n( l i st aGener os) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

Tema 6 Colecciones 181
ITSON Manuel Domitsu Kono
/ / Se modi f i ca el gener o de cl ave " GCB0002" , a " Samba"
t r y {
gener o = f achada. obt en( new Gener o( " GCB0002" ) ) ;
gener o. set Nombr e( " Samba" ) ;
f achada. act ual i za( gener o) ;
Syst em. out . pr i nt l n( " Se act ual i zo el gener o de cl ave GCB0002" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " GCB0002" ) ;
}

/ / Se el i mi na el gner o " GPC0003" del cat al ogo de gener os
t r y {
f achada. el i mi na( new Gener o( " GPC0003" ) ) ;
Syst em. out . pr i nt l n( " Se el i mi no el gener o de cl ave GPC0003" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " GPC0003" ) ;
}

/ / Se el i mi na el gner o " GPM0004" ( i nexi st ent e) del cat al ogo de gener os
t r y {
f achada. el i mi na( new Gener o( " GPM0004" ) ) ;
Syst em. out . pr i nt l n( " Se el i mi no el gener o de cl ave GPM0004" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " GPM0004" ) ;
}

/ / Despl i ega el cont eni do del cat al ogo de gner os
Syst em. out . pr i nt l n( " Li st a de gner os" ) ;
t r y {
l i st aGener os = f achada. consul t aGener os( ) ;
Syst em. out . pr i nt l n( l i st aGener os) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Despl i ega el cont eni do del cat al ogo de gner os de canci ones
Syst em. out . pr i nt l n( " Li st a de gner os de canci ones" ) ;
t r y {
l i st aGener os = f achada. consul t aGener osCanci ones( ) ;
Syst em. out . pr i nt l n( l i st aGener os) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Despl i ega el cont eni do del cat al ogo de gner o de pel cul as
Syst em. out . pr i nt l n( " Li st a de gner os de pel cul as" ) ;
t r y {
l i st aGener os = f achada. consul t aGener osPel i cul as( ) ;
Syst em. out . pr i nt l n( l i st aGener os) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
182 Colecciones
ITSON Manuel Domitsu Kono
}

/ / Se obt i ene el gener o cuya cl ave es " GCB0001"
t r y {
gener o = f achada. obt en( new Gener o( " GCB0001" ) ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se agr ega l a canci n 1 al cat l ogo de canci ones
t r y {
f achada. agr ega( new Canci on( " CBB0001" , " The l ong and wi ndi ng r oad" ,
gener o, " The Beat l es" , " J ohn Lennon" ,
" Let i t be" , 3, new Fecha( 24, 3, 1970) ) ) ;
Syst em. out . pr i nt l n( " Se agr ego l a canci on 1" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 1" ) ;
}

/ / Se i nt ent a agr egar de nuevo l a canci n 1 al cat l ogo de canci ones
t r y {
f achada. agr ega( new Canci on( " CBB0001" , " The l ong and wi ndi ng r oad" ,
gener o, " The Beat l es" , " J ohn Lennon" ,
" Let i t be" , 3, new Fecha( 24, 3, 1970) ) ) ;
Syst em. out . pr i nt l n( " Se agr ego l a canci on 1" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 1" ) ;
}

/ / Se obt i ene el gener o cuya cl ave es " GCB0002"
t r y {
gener o = f achada. obt en( new Gener o( " GCB0002" ) ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se agr ega l a canci n 2 al cat l ogo de canci ones
t r y {
f achada. agr ega( new Canci on( " CSD0002" , " Gar ot a de I panema" , gener o,
" Los I ndi os Tabaj ar as" , " Ant oni o Car l os J obi m" ,
" Bossanova J azz Vol . 1" , 3, new Fecha( 1, 12, 1970) ) ) ;
Syst em. out . pr i nt l n( " Se agr ega l a canci on 2" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 2" ) ;
}

/ / Se agr ega l a canci n 3 al cat l ogo de canci ones
t r y {
f achada. agr ega( new Canci on( " CSB0003" , " Desaf i nado" , gener o,
" J oao Gi l ber t o" , " J oao Gi l ber t o" ,
" Bossanova J azz Vol . 1" , 3, new Fecha( 3, 12, 1980) ) ) ;
Syst em. out . pr i nt l n( " Se agr ega l a canci on 3" ) ;
Tema 6 Colecciones 183
ITSON Manuel Domitsu Kono
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 3" ) ;
}

/ / Se l i st a el cat l ogo de canci ones
Syst em. out . pr i nt l n( " Li st a de canci ones: " ) ;
t r y {
l i st aCanci ones = f achada. consul t aCanci ones( ) ;
Syst em. out . pr i nt l n( l i st aCanci ones) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se act ual i za l a canci n de cl ave " CBB0001" al gener o " GCR0003"
t r y {
/ / Obt i ene el gner o 3 del ct al ogo de gner os de canci ones
gener o = f achada. obt en( new Gener o( " GCR0003" ) ) ;
i f ( gener o ! = nul l ) {
/ / Obt i ene l a canci n 1 del ct al ogo de canci ones
canci on = f achada. obt en( new Canci on( " CBB0001" ) ) ;
i f ( canci on ! = nul l ) {
/ / Se act ual i za l a canci n 1
canci on. set Gener o( gener o) ;
f achada. act ual i za( canci on) ;
Syst em. out . pr i nt l n(
" Se act ual i zo l a canci n de cl ave CBB0001 al gener o GCR0003" ) ;
} el se Syst em. out . pr i nt l n( " No exi st e l a canci n CBB0001" ) ;
} el se Syst em. out . pr i nt l n( " No exi st e el gner o GCR0003" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se el i mi na l a canci n de cl ave " CSB0003"
t r y {
f achada. el i mi na( new Canci on( " CSB0003" ) ) ;
Syst em. out . pr i nt l n( " Se el i mi na l a canci on de cl ave CSB0003" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " CSB0003" ) ;
}

/ / Se l i st a el cat l ogo de canci ones
Syst em. out . pr i nt l n( " Li st a de canci ones: " ) ;
t r y {
l i st aCanci ones = f achada. consul t aCanci ones( ) ;
Syst em. out . pr i nt l n( l i st aCanci ones) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se l i st a l as canci ones con el i nt er pr et e " The Beat l es"
Syst em. out . pr i nt l n( " Li st a de canci ones de The Beat l es: " ) ;
t r y {
184 Colecciones
ITSON Manuel Domitsu Kono
l i st aCanci ones = f achada. consul t aCanci onesI nt er pr et e( " The Beat l es" ) ;
Syst em. out . pr i nt l n( l i st aCanci ones) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se l i st a l as canci ones de samba, " GCB0002"
Syst em. out . pr i nt l n( " Li st a de canci ones de Samba: " ) ;
t r y {
l i st aCanci ones = f achada. consul t aCanci onesGener o( " GCB0002" ) ;
Syst em. out . pr i nt l n( l i st aCanci ones) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se obt i ene el gener o cuya cl ave es " GPD0001"
t r y {
gener o = f achada. obt en( new Gener o( " GPD0001" ) ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se agr ega l a pel cul a 1 al cat l ogo de pel cul as
t r y {
f achada. agr ega( new Pel i cul a( " PED0001" , " Casa Bl anca" , gener o,
" Humphr ey Bogar t " , " I ngr i d Ber gman" ,
" Mi chael Cur t i z" , 102, new Fecha( 1, 1, 1942) ) ) ;
Syst em. out . pr i nt l n( " Se agr ego l a pel cul a 1" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 1" ) ;
}

/ / Se obt i ene el gener o cuya cl ave es " GPC0002"
t r y {
gener o = f achada. obt en( new Gener o( " GPC0002" ) ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}
/ / Se agr ega l a pel cul a 2 al cat l ogo de pel cul as
t r y {
f achada. agr ega( new Pel i cul a( " PCF0002" , " 2001 Space Odyssey" ,
gener o, " Kei r Dul l ea" , " Gar y Lockwood" ,
" St anl ey Kubr i ck" , 141, new Fecha( 1, 1, 1968) ) ) ;
Syst em. out . pr i nt l n( " Se agr ego l a pel cul a 2" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " 2" ) ;
}

/ / Se l i st a el cat l ogo de pel cul as
Syst em. out . pr i nt l n( " Li st a de pel i cul as: " ) ;
t r y {
Tema 6 Colecciones 185
ITSON Manuel Domitsu Kono
l i st aPel i cul as = f achada. consul t aPel i cul as( ) ;
Syst em. out . pr i nt l n( l i st aPel i cul as) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Se l i st a l as pel cul as de I ngr i d Ber gman
Syst em. out . pr i nt l n( " Li st a de pel i cul as de I ngr i d Ber gman: " ) ;
t r y {
l i st aPel i cul as = f achada. consul t aPel i cul asAct or ( " I ngr i d Ber gman" ) ;
Syst em. out . pr i nt l n( l i st aPel i cul as) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}

/ / Li st a de pel i cul as en el per i odo: 1/ 03/ 1970 a 1/ 05/ 1970
Per i odo per i odo = new Per i odo( new Fecha( 1, 1, 1960) ,
new Fecha( 1, 1, 1970) ) ;
Syst em. out . pr i nt l n( " Li st a de pel i cul as en el per i odo: " + per i odo) ;
t r y {
l i st aPel i cul as = f achada. consul t aPel i cul asPer i odo( per i odo) ;
Syst em. out . pr i nt l n( l i st aPel i cul as) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}
}
}

El listado siguiente muestra un fragmento de la corrida del programa anterior:

. . .
Se agr ego el gner o 1 al cat l ogo de gner os
Se agr ego el gner o 2 al cat l ogo de gner os
Se agr ego el gner o 3 al cat l ogo de gner os
Er r or : Gner o r epet i do 1
Se agr ego el gner o 4 al cat l ogo de gner os
Se agr ego el gner o 5 al cat l ogo de gner os
Se agr ego el gner o 6 al cat l ogo de gner os
Li st a de gner os
[ GCB0001, Bal ada, C, GCB0002, Bossanova, C, GCR0003, Rock, C, GPD0001,
Dr ama, P, GPC0002, Ci enci a Fi cci n, P, GPC0003, Comedi a, P]
Se act ual i zo el gener o de cl ave GCB0002
Se el i mi no el gener o de cl ave GPC0003
Error: No se puede eliminar el gnero GP004
Li st a de gner os
[ GCB0001, Bal ada, C, GCB0002, Samba, C, GCR0003, Rock, C, GPD0001,
Dr ama, P, GPC0002, Ci enci a Fi cci n, P]
Li st a de gner os de canci ones
[ GCB0001, Bal ada, C, GCB0002, Samba, C, GCR0003, Rock, C]
Li st a de gner os de pel cul as
[ GPD0001, Dr ama, P, GPC0002, Ci enci a Fi cci n, P]
. . .

186 Colecciones
ITSON Manuel Domitsu Kono

Podemos notar el mensaje de error que se despliega querer eliminar un gnero
inexistente aunque. Este mensaje de error es amistoso para el usuario ya que la
excepcin original lanzada por el mtodo el i mi na( ) de la clase Generos es atrapada
y relanzada por la clase Fachada. Este mensaje de error amistoso, til para el usuario
final, no proporciona ninguna informacin sobre el error original ni sobre el lugar donde
ocurri el error, informacin necesaria para el desarrollador que depura el cdigo. Para
mostrar dicha informacin podemos agregarle a cada bloque cat ch la sentencia:
f e. pr i nt St ackTr ace( ) ;

necesaria para desplegar la traza de las invocaciones a los mtodos en el momento de
generarse la excepcin. Si slo hubiramos envuelto la excepcin en otra sin conservar
la informacin de la excepcin original usando el siguiente cdigo en los bloques
cat ch dentro de los mtodos de la clase Per si st enci aLi st as:

. . .
/ / Se el i mi na el gner o " GPM0004" ( i nexi st ent e) del cat al ogo de gener os
t r y {
f achada. el i mi na( new Gener o( " GPM0004" ) ) ;
Syst em. out . pr i nt l n( " Se el i mi no el gener o de cl ave GPM0004" ) ;
} cat ch( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) + " GPM0004" ) ;
f e. pr i nt St ackTr ace( ) ;
}
. . .

Al ejecutar la aplicacin, tendremos lo mostrado en el siguiente fragmento del listado de
la corrida:

. . .
excepci ones. Per si st enci aExcept i on: No se puede el i mi nar el gner o
at
per si st enci a. Per si st enci aLi st as. el i mi na( Per si st enci aLi st as. j ava: 227)
at pr uebas. Pr ueba. mai n( Pr ueba. j ava: 135)
. . .

Podemos ver que en este caso la traza, mostrado al principio del listado, slo nos
muestra las invocaciones de mtodos hasta el punto donde se envolvi la excepcin
original lanzando la nueva excepcin. Sigue sin saberse dnde se gener la excepcin
original. Sin embargo si al envolver la excepcin original conservamos la informacin
de la excepcin original como se muestra en la clase PersistenciaListas, tendremos lo
mostrado en el siguiente fragmento del listado de la corrida al ejecutar la aplicacin:

. . .
excepci ones. Per si st enci aExcept i on: No se puede el i mi nar el gner o
at
per si st enci a. Per si st enci aLi st as. el i mi na( Per si st enci aLi st as. j ava: 227)
at pr uebas. Pr ueba. mai n( Pr ueba. j ava: 135)
Caused by: excepci ones. DAOExcept i on: Gner o i nexi st ent e
at dao. Gener os. el i mi na( Gener os. j ava: 86)
Tema 6 Colecciones 187
ITSON Manuel Domitsu Kono
at
per si st enci a. Per si st enci aLi st as. el i mi na( Per si st enci aLi st as. j ava: 224)
. . . 1 mor e
. . .

Podemos ver que en este caso la traza de invocaciones de mtodos contina hasta el
punto en que se gener la excepcin original.

Conjuntos

Un conjunto es una coleccin que no contiene elementos duplicados. Ms formalmente,
un conjunto no contiene pares de elementos e1 y e2 tal que e1. equal s( e2) . Esta
coleccin modela la abstraccin matemtica de conjunto.

En la figura 6.6 se muestran las interfaces y clases que implementan las listas.

Figura 6.6
Interfaz Set<T>

La interfaz Set <T>establece condiciones adicionales a las heredadas de la interfaz
Col l ect i on<T>, en los contratos de todos los constructores y en los contratos de los
mtodos add( ) , equal s( ) y hashCode( ) .

188 Colecciones
ITSON Manuel Domitsu Kono
Interfaz Comparator<T>

Esta interfaz declara un mtodo de comparacin que impone un ordenamiento total en
algunas colecciones de objetos. Los comparadores pueden pasarse como parmetro a
un mtodo de ordenamiento como Col l ect i ons. sor t ( ) para permitir un control
preciso del ordenenamiento. Los comparadores tambin pueden usarse para para
controlar ciertas estructuras de datos, tal como Tr eeset o Tr eeMap.

En la tabla 6.10 se muestran los mtodos declarados por la interfaz Compar at or <E>.

Tabla 6.10 Mtodos de la Interfaz Comparator<E>
i nt compare( T el ement 1, T el ement 2)

Compara sus dos argumentos por orden. Regresa un entero negativo, cero o un entero positivo si el
primer argumento es menor, igual o mayor que el segundo.

La clase que implemente esta interfaz debe asegurarse que:

sgn( compar e( x, y) ) == - sgn( compar e( y, x) ) .
La relacin sea transitiva. ( ( compar e( x, y) >0) && ( compar e( y, z) >0) ) implica que
compar e( x, z) >0.
compar e( x, y) ==0 implica que sgn( compar e( x, z) ) ==sgn( compar e( y, z) ) para toda z.

Lanza:
Cl assCast Except i on Si los objetos de sus parmetros no pueden ser comparados.
bool ean equals( Obj ect obj ect )

Regresa verdadero slo si el objeto del parmetro es un comparador y es igual a este comparador.
Interfaz SortedSet<E>

La interfaz Sor t edSet <E>garantiza que su iterador recorrer el conjunto en orden
ascendente de sus elementos, o por un comparador establecido por su constructor.
Todos los elementos que se inserten en un conjunto ordenado deben implementar la
interfaz Compar abl e (o ser aceptados por el comparador especificado). En la tabla
6.11 se muestran los mtodos declarados por la interfaz Sor t edSet <E>.

Tabla 6.11 Mtodos de la Interfaz Sor t edSet <E>
Compar at or <? super E> comparator( )

Regresa el comparador asociado con este conjunto ordenado, o nulo si usa el ordenamiento de
elementos natural.
E first( )

Regresa el primer elemento en este conjunto ordenado.

Lanza:
NoSuchEl ement Except i on Si el conjunto ordenado est vaco.
Tema 6 Colecciones 189
ITSON Manuel Domitsu Kono
Tabla 6.11 Mtodos de la Interfaz Sor t edSet <E>. Cont.
E last( )

Regresa el ltimo elemento en este conjunto ordenado.

Lanza:
NoSuchEl ement Except i on Si el conjunto ordenado est vaco.
Sor t edSet <E> headSet( E t oEl ement )

Regresa una vista de una porcin de la este conjunto ordenado cuyos elementos son estrictamente
menores que t oEl ement . Cualquier cambio en el subconjunto afecta al conjunto y viceversa.

Lanza:
Cl assCast Except i on Si t oEl ement no es compatible con el comparador de este
conjunto.
I l l egal Ar gument Except i on Si este conjunto es un subconjunto, un headset o tailset y
t oEl ement no est en el rango especificado del subconjunto, headset o tailset.
Nul l Poi nt er Except i on Si t oEl ement es nulo y la lista no admite elementos nulos.
Sor t edSet <E> tailSet( E f r omEl ement )

Regresa una vista de una porcin de la este conjunto ordenado cuyos elementos son mayores o iguales
que f r omEl ement . Cualquier cambio en el subconjunto afecta al conjunto y viceversa.

Lanza:
Cl assCast Except i on Si f r omEl ement no es compatible con el comparador de este
conjunto.
I l l egal Ar gument Except i on Si este conjunto es un subconjunto, un headset o tailset y
f r omEl ement no est en el rango especificado del subconjunto, headset o tailset.
Nul l Poi nt er Except i on Si f r omEl ement es nulo y la lista no admite elementos nulos.
Sor t edSet <E> subSet( E f r omEl ement , E t oEl ement )

Regresa una vista de una porcin de la este conjunto ordenado cuyos elementos estn en el rango de
f r omEl ement inclusive hasta t oEl ement exclusive. Si f r omEl ement y t oEl ement son iguales, el
subconjunto es vaco. Cualquier cambio en el subconjunto afecta al conjunto y viceversa.

Lanza:
Cl assCast Except i on Si f r omEl ement y t oEl ement no pueden compararse entre si
usando el comparador de este conjunto.
I l l egal Ar gument Except i on Si f r omEl ement es mayor que t oEl ement ; o si el
conjunto es un subconjunto, un headset o tailset y f r omEl ement o t oEl ement no estn en el
rango especificado del subconjunto, headset o tailset.
Nul l Poi nt er Except i on Si f r omEl ement o t oEl ement es nulo y la lista no admite
elementos nulos.
Interfaz Comparable<T>

Esta interfaz impone un ordenamiento total en cada clase que lo implementa. Este
ordenamiento se conoce como el ordenamiento natural y su nico mtodo
compar eTo( ) se conoce como el mtodo de comparacin natural.

190 Colecciones
ITSON Manuel Domitsu Kono
Las listas (y los arreglos) de objetos que impletan esta interfaz pueden ordenarse
automticamente por el mtodo de ordenamiento como Col l ect i ons. sor t ( ) (o
Ar r ays. sor t ( ) ). para permitir un control preciso del ordenenamiento. Los
comparadores tambin pueden usarse para para controlar ciertas estructuras de datos,
tal como Tr eeset o Tr eeMap. Los objetos que implementanesta interfazpueden
usarse como llaves en un mapa ordenado o como elementos en un conjunto ordenado,
sin la ayuda de un comparador.

En la tabla 6.12 se muestran los mtodos declarados por la interfaz Compar abl e<T>.

Tabla 6.12 Mtodos de la Interfaz Comparable<T>
i nt compareTo( T o)

Compara este objeto con el objeto o de su parmetro.sus dos argumentos por orden. Regresa un entero
negativo, cero o un entero positivo si este objeto es menor, igual o mayor que el objeto del parmetro.

Lanza:
Cl assCast Except i on Si este objeto no puede compararse con el objeto del parmetro.

Interfaz NavigableSet<E>

La interfaz Navi gabl eSet <E>extiende la interfaz Sor t edSet <E>con mtodos de
navegacin: l ower ( ) , f l oor ( ) , cei l i ng( ) y hi gher ( ) que reportan las
coincidencias ms cercanas para una bsqueda dada. Un conjunto navegable puede
accederse en orden ascendente o descendente. En la tabla 6.13 se muestran los
mtodos declarados por la interfaz Navi gabl eSet <E>.

Tabla 6.13 Mtodos de la Interfaz NavigableSet<E>
E ceiling( E e)

Regresa el elemento menor que sea mayor o igual que el elemento del parmetro, o null si no existe ese
elemento.

Lanza:
Cl assCast Except i on Si el elemento del parmetro no puede compararse con los
elementos del conjunto.
Nul l Poi nt er Except i on Si el elemento del parmetro es nulo y el conjunto no admite
elementos nulos.
E floor( E e)

Regresa el elemento mayor que sea menor o igual que el elemento del parmetro, o null si no existe ese
elemento.

Lanza:
Cl assCast Except i on Si el elemento del parmetro no puede compararse con los
elementos del conjunto.
Nul l Poi nt er Except i on Si el elemento del parmetro es nulo y el conjunto no admite
elementos nulos.

Tema 6 Colecciones 191
ITSON Manuel Domitsu Kono
Tabla 6.13 Mtodos de la Interfaz NavigableSet<E>. Cont.
E higher( E e)

Regresa el elemento menor que sea mayor o igual que el elemento del parmetro, o null si no existe ese
elemento.

Lanza:
Cl assCast Except i on Si el elemento del parmetro no puede compararse con los
elementos del conjunto.
Nul l Poi nt er Except i on Si el elemento del parmetro es nulo y el conjunto no admite
elementos nulos.
E lower( E e)

Regresa el elemento mayor que sea estrictamente menor que el elemento del parmetro, o null si no
existe ese elemento.

Lanza:
Cl assCast Except i on Si el elemento del parmetro no puede compararse con los
elementos del conjunto.
Nul l Poi nt er Except i on Si el elemento del parmetro es nulo y el conjunto no admite
elementos nulos.
E pollFirst( )

Elimina y regresa el primer (el menor) elemento, o null si el conjunto est vaco.
E pollLast( )

Elimina y regresa el ltimo (el mayor) elemento, o null si el conjunto est vaco.
I t er at or <E> descendingIterator( )

Regresa un iterador sobre los elementos de este conjunto, en orden descendente.
Navi gabl eSet <E> descendingSet( )

Regresa una vista en orden invertido de los elementos de este conjunto. El conjunto descendente est
respaldado por este conjunto. Los cambios en el conjunto se reflejan en el conjunto descendente y
viceversa.
Navi gabl eSet <E> headSet( E t oEl ement , bool ean i ncl usi ve)

Regresa una vista de la porcin de este conjunto cuyos elementos son menores (o iguales si el
parmetro i ncl usi ve es verdadero) que el elemento del parmetro. El conjunto regresado est
respaldado por este conjunto. Los cambios en el conjunto se reflejan en el conjunto regresado y
viceversa.

Lanza:
Cl assCast Except i on Si el elemento del parmetro no es compatible con el comparador (o
si el conjunto no tiene comparador o si el elemento del parmetro no implementa la interfaz
comparable).
Nul l Poi nt er Except i on Si el elemento del parmetro es nulo y el conjunto no admite
elementos nulos.
I l l egal Ar gument Except i on Si este conjunto tiene un rango restringido y el elemento del
parmetro cae fuero del rengo del parmetro.



192 Colecciones
ITSON Manuel Domitsu Kono
Tabla 6.13 Mtodos de la Interfaz NavigableSet<E>. Cont.
Navi gabl eSet <E> tailSet( E f r omEl ement , bool ean i ncl usi ve)

Regresa una vista de la porcin de este conjunto cuyos elementos son mayores (o iguales si el
parmetro i ncl usi ve es verdadero) que el elemento del parmetro. El conjunto regresado est
respaldado por este conjunto. Los cambios en el conjunto se reflejan en el conjunto regresado y
viceversa.

Lanza:
Cl assCast Except i on Si el elemento del parmetro no es compatible con el comparador (o
si el conjunto no tiene comparador o si el elemento del parmetro no implementa la interfaz
comparable).
Nul l Poi nt er Except i on Si el elemento del parmetro es nulo y el conjunto no admite
elementos nulos.
I l l egal Ar gument Except i on Si este conjunto tiene un rango restringido y el elemento del
parmetro cae fuero del rengo del parmetro.
Navi gabl eSet <E> subSet( E f r omEl ement , bool ean f r omI ncl usi ve,
E t oEl ement , bool ean t oI ncl usi ve)

Regresa una vista de la porcin de este conjunto cuyos elementos estn en el rango de f r omEl ement
a t oEl ement , si f r omEl ement y t oEl ement son iguales, el conjunto regresado es vaco a menos
que f r omI ncl usi ve y t oI ncl usi ve sean ambas verdaderas. El conjunto regresado est
respaldado por este conjunto. Los cambios en el conjunto se reflejan en el conjunto regresado y
viceversa.

Lanza:
Cl assCast Except i on Si el elemento del parmetro no es compatible con el comparador (o
si el conjunto no tiene comparador o si el elemento del parmetro no implementa la interfaz
comparable).
Nul l Poi nt er Except i on Si el elemento del parmetro es nulo y el conjunto no admite
elementos nulos.
I l l egal Ar gument Except i on Si f r omEl ement es mayor que t oEl ement , o si este
conjunto tiene un rango restringido y el elemento del parmetro cae fuera del rengo del
parmetro.
Clase HashSet<E>

Esta clase implementa la interfaz Set , sobre una instancia de HashMap. No hay
garantas sobre el orden de iteracin del conjunto; en particular no hay garanta que el
orden permanecera constante con el tiempo. Esta clase permite el elemento nulo.

En la tabla 6.14 se muestran los mtodos exclusivos de la clase HashSet <E>.

Tabla 6.14 Mtodos exclusivos de la Clase HashSet<E>
HashSet( )

Construye un conjunto vaco con una capacidad inicial de 10 y un factor de carga de 0.75.



Tema 6 Colecciones 193
ITSON Manuel Domitsu Kono
Tabla 6.14 Mtodos exclusivos de la Clase HashSet<E>
HashSet( Col l ect i on<? ext ends E> c)

Construye un conjunto que contiene los elementos de la coleccin del parmetro. El factor de carga es
de 0.75. El conjunto tiene una capacidad inicial suficiente para contener la coleccin.

Lanza:
Nul l Poi nt er Except i on Si la coleccin del parmetro es nula.
HashSet( i nt inicialCapacity, f l oat l oadf act or )

Construye un conjunto vaco con la capacidad inicial y factor de carga dados por los parmetros.

Lanza:
I l l egal Ar gument Except i on Si el valor de la capacidad inicial es negativo o el factor de
carga sea no positivo.
HashSet( i nt inicialCapacity)

Construye un conjunto vaco con la capacidad inicial dada por el parmetro y un factor de carga de 0.75.

Lanza:
I l l egal Ar gument Except i on Si el valor de la capacidad inicial es negativo.
Obj ect cl one( )

Regresa una copia del conjunto. Los elementos del conjunto no son copiados.
Clase TreeSet<E>

Esta clase implementa la interfaz Navi gabl eSet , sobre una instancia de Tr eeMap.
Esta clase garantiza que el conjunto estar ordenado en orden ascendente, de acuerdo
al orden natural de sus elementos o por un comparador establecido en el constructor.

En la tabla 6.15 se muestran los mtodos exclusivos de la clase Tr eeSet <E>.

Tabla 6.15 Mtodos exclusivos de la Clase TreeSet<E>
TreeSet( )

Construye un nuevo conjunto vaco ordenado de acuerdo al orden natural de sus elementos.
TreeSet( Col l ect i on<? ext ends E> c)

Construye un nuevo conjunto con los elementos de la coleccin del parmetro, ordenados de acuerdo al
orden natural de los elementos.

Lanza:
Cl assCast Except i on Si los elementos de la coleccin del parmetro no son comparables o
no son mutuamente comparables.
Nul l Poi nt er Except i on Si la coleccin del parmetro es nula.
TreeSet( Compar at or <? super E> compar at or )

Construye un nuevo conjunto vaco, ordenado de acuerdo al comparador del parmetro.


194 Colecciones
ITSON Manuel Domitsu Kono
Tabla 6.15 Mtodos exclusivos de la Clase TreeSet<E>. Cont.
TreeSet( Sor t edSet <E> set )

Construye un nuevo conjunto con los elementos del conjunto ordenado del parmetro, ordenados de
acuerdo al mismo orden.

Lanza:
Nul l Poi nt er Except i on Si conjunto ordenado del parmetro es nulo.
Obj ect cl one( )

Regresa una copia del conjunto. Los elementos del conjunto no son copiados.
Ejemplo Sobre Conjuntos

Para realizar un estudio sobre el aprovechamiento escolar se requiere obtener
informacin sobre los cursos que estudian los alumnos. Para ello se requiere un
programa que capture en conjuntos ordenados los alumnos que estudian cada materia.
El programa deber generar conjuntos con diferentes combinaciones de alumnos y las
materias que llevan. El siguiente diagrama de clases contiene las clases del programa
y el cdigo de algunas de ellas se muestra a continuacin:

Figura 6.7
Tema 6 Colecciones 195
ITSON Manuel Domitsu Kono
Alumno.java
/ *
* Al umno. j ava.
*
* @aut hor mdomi t su
*/
package obj et osNegoci o;

/ **
* Est a cl ase r epr esent a un al umno
*/
publ i c cl ass Al umno i mpl ement s Compar abl e<Al umno> {
pr i vat e St r i ng i d;
pr i vat e St r i ng nombr e;

/ **
* Const r uct or vaci o
*/
publ i c Al umno( ) {
}

/ **
* Const r uct or que i ni ci al i za el i d del al umno
* @par ami d I d del al umno
*/
publ i c Al umno( St r i ng i d) {
t hi s. i d = i d;
}

/ **
* Const r uct or que i ni ci al i za l os at r i but os de un al umno
* @par ami d I d del al umno
* @par amnombr e Nombr e del al umno
*/
publ i c Al umno( St r i ng i d, St r i ng nombr e) {
t hi s. i d = i d;
t hi s. nombr e = nombr e;
}

. . .

/ **
* Compar a est e al umno con el al umno del par amet r o usando sus i d
* como cadenas usando el mt odo compar eTo.
* @par amal umno Al umno con el que se compar a est e al umno.
* @r et ur n 0 si son i gual es, posi t i vo si el est e al umno es mayor que
* el al umno del par amet r o, posi t i vo si est e al umno es menor que el
* al umno del par amet r o
*/
@Over r i de
publ i c i nt compar eTo( Al umno al umno) {
r et ur n i d. compar eTo( al umno. i d) ;
}

@Over r i de
publ i c St r i ng t oSt r i ng( ) {
196 Colecciones
ITSON Manuel Domitsu Kono
r et ur n i d + " , " + nombr e;
}
}

ListaAsistencia.java
/ *
* Li st aAsi st enci a. j ava
*
* @aut hor mdomi t su
*/
package obj et osNegoci o;

i mpor t j ava. ut i l . Set ;
i mpor t j ava. ut i l . Tr eeSet ;

/ **
* est a cl ase r epr esent a una l i st a de al umnos i mpl ement ada sobr e un
* conj unt o or denado.
*/
publ i c cl ass Li st aAsi st enci a {

pr i vat e Mat er i a mat er i a;
pr i vat e Set <Al umno> l i st aAl umnos;

/ **
* Const r uct or . I ni ci al i za el at r i but o mat er i a al val or de su par amet r o
* @par ammat er i a
*/
publ i c Li st aAsi st enci a( Mat er i a mat er i a) {
t hi s. mat er i a = mat er i a;

/ / Cr ea un conj unt o or denado par a al macenar al umnos de l a mat er i a
l i st aAl umnos = new Tr eeSet ( ) ;
}

/ **
* Regr esa l a mat er i a de l a l i st a de al umnos
* @r et ur n La mat er i a de l a l i st a de al umnos
*/
publ i c Mat er i a get Mat er i a( ) {
r et ur n mat er i a;
}

/ **
* Regr esa l a l i st a de al umnos de l a mat er i a
* @r et ur n La l i st a de al umnos de mat er i a.
*/
publ i c Set <Al umno> get Li st aAl umnos( ) {
r et ur n l i st aAl umnos;
}

/ **
* Agr ega un al umno al conj unt o or denado que r epr esent a l a l i st a de
* al umnos de l a mat er i a
* @par amal umno a aggr egar a l a l i st a de al umnos de l a mat er i a
*/
Tema 6 Colecciones 197
ITSON Manuel Domitsu Kono
publ i c voi d agr egaAl umno( Al umno al umno) {
l i st aAl umnos. add( al umno) ;
}
}

Para probar las clases anteriores se tiene el siguiente programa de prueba:

Prueba.java
/ *
* Pr ueba. j ava.
*
* @aut hor mdomi t su
*/

package pr uebas;

i mpor t j ava. ut i l . Set ;
i mpor t obj et osNegoci o. Al umno;
i mpor t obj et osNegoci o. Li st aAsi st enci a;
i mpor t obj et osNegoci o. Mat er i a;

publ i c cl ass Pr ueba {

/ **
* @par amar gs t he command l i ne ar gument s
*/
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) {
/ / Se cr ean ci nco al umnos
Al umno a1 = new Al umno( " 000123" , " J uan Per ez" ) ;
Al umno a2 = new Al umno( " 000125" , " Lour des Ser r ano" ) ;
Al umno a3 = new Al umno( " 000135" , " J ose Si er r a" ) ;
Al umno a4 = new Al umno( " 000153" , " Mar i o Lopez" ) ;
Al umno a5 = new Al umno( " 000170" , " Ana Beni t ez" ) ;

/ / Se cr ean sei s l i st as de asi st enci a
Li st aAsi st enci a l a1 =
new Li st aAsi st enci a( new Mat er i a( " 003753" , " I nt egr i dad Per sonal " ) ) ;
Li st aAsi st enci a l a2 =
new Li st aAsi st enci a( new Mat er i a( " 003768" , " Cal ccul o I " ) ) ;
Li st aAsi st enci a l a3 =
new Li st aAsi st enci a( new Mat er i a( " 003773" , " Mat emat i ca Di scr et a" ) ) ;
Li st aAsi st enci a l a4 =
new Li st aAsi st enci a( new Mat er i a( " 003774" , " Pr ogr amaci n I " ) ) ;
Li st aAsi st enci a l a5 =
new Li st aAsi st enci a(
new Mat er i a( " 003775" , " Ar qui t ect ur a de Comput ador as" ) ) ;
Li st aAsi st enci a l a6 =
new Li st aAsi st enci a( new Mat er i a( " 003865" , " Vi da Sal udabl e" ) ) ;

/ / Se agr egan al umnos a l a cl ase " I nt egr i dad Per sonal "
l a1. agr egaAl umno( a1) ;
l a1. agr egaAl umno( a2) ;
l a1. agr egaAl umno( a4) ;
l a1. agr egaAl umno( a3) ;

/ / Li st a l os al umnos de l a cl ase " I nt egr i dad Per sonal "
198 Colecciones
ITSON Manuel Domitsu Kono
Syst em. out . pr i nt l n(
" Li st a de al umnos de l a cl ase I nt egr i dad Per sonal " ) ;
Syst em. out . pr i nt l n( l a1. get Li st aAl umnos( ) ) ;

/ / Se agr egan al umnos a l a cl ase " Cal cul o I "
l a2. agr egaAl umno( a2) ;
l a2. agr egaAl umno( a4) ;
l a2. agr egaAl umno( a3) ;

/ / Li st a l os al umnos de l a cl ase " Cal cul o I "
Syst em. out . pr i nt l n( " Li st a de al umnos de l a cl ase Cal cul o I " ) ;
Syst em. out . pr i nt l n( l a2. get Li st aAl umnos( ) ) ;

/ / Se agr egan al umnos a l a cl ase " Mat emat i ca Di scr et a"
l a3. agr egaAl umno( a1) ;
l a3. agr egaAl umno( a5) ;
l a3. agr egaAl umno( a4) ;

/ / Li st a l os al umnos de l a cl ase " Mat emat i ca Di scr et a"
Syst em. out . pr i nt l n(
" Li st a de al umnos de l a cl ase Mat emat i ca Di scr et a" ) ;
Syst em. out . pr i nt l n( l a3. get Li st aAl umnos( ) ) ;

/ / Se agr egan al umnos a l a cl ase " Pr ogr amaci n I "
l a4. agr egaAl umno( a4) ;
l a4. agr egaAl umno( a3) ;
l a4. agr egaAl umno( a5) ;

/ / Li st a l os al umnos de l a cl ase " Pr ogr amaci n I "
Syst em. out . pr i nt l n( " Li st a de al umnos de l a cl ase Pr ogr amaci n I " ) ;
Syst em. out . pr i nt l n( l a4. get Li st aAl umnos( ) ) ;

/ / Se agr egan al umnos a l a cl ase " Ar qui t ect ur a de Comput ador as"
l a5. agr egaAl umno( a2) ;
l a5. agr egaAl umno( a1) ;
l a5. agr egaAl umno( a4) ;
l a5. agr egaAl umno( a5) ;

/ / Li st a l os al umnos de l a cl ase " Ar qui t ect ur a de Comput ador as"
Syst em. out . pr i nt l n(
" Li st a de al umnos de l a cl ase Ar qui t ect ur a de Comput ador as" ) ;
Syst em. out . pr i nt l n( l a5. get Li st aAl umnos( ) ) ;

/ / Se agr egan al umnos a l a cl ase " Vi da Sal udabl e"
l a6. agr egaAl umno( a2) ;
l a6. agr egaAl umno( a1) ;
l a6. agr egaAl umno( a4) ;
l a6. agr egaAl umno( a5) ;
l a6. agr egaAl umno( a3) ;

/ / Li st a l os al umnos de l a cl ase " Vi da Sal udabl e"
Syst em. out . pr i nt l n( " Li st a de al umnos de l a cl ase Vi da Sal udabl e" ) ;
Syst em. out . pr i nt l n( l a6. get Li st aAl umnos( ) ) ;

. . .
}
}
Tema 6 Colecciones 199
ITSON Manuel Domitsu Kono
La corrida de la clase prueba arroja el siguiente resultado. Note que aunque los
alumnos se agregaron en desorden en el conjunto los alumnos se ordenan, como se ve
en el listado:

Li st a de al umnos de l a cl ase I nt egr i dad Per sonal
[ 000123, J uan Per ez, 000125, Lour des Ser r ano, 000135, J ose Si er r a,
000153, Mar i o Lopez]
Li st a de al umnos de l a cl ase Cal cul o I
[ 000125, Lour des Ser r ano, 000135, J ose Si er r a, 000153, Mar i o Lopez]
Li st a de al umnos de l a cl ase Mat emat i ca Di scr et a
[ 000123, J uan Per ez, 000153, Mar i o Lopez, 000170, Ana Beni t ez]
Li st a de al umnos de l a cl ase Pr ogr amaci n I
[ 000135, J ose Si er r a, 000153, Mar i o Lopez, 000170, Ana Beni t ez]
Li st a de al umnos de l a cl ase Ar qui t ect ur a de Comput ador as
[ 000123, J uan Per ez, 000125, Lour des Ser r ano, 000153, Mar i o Lopez,
000170, Ana Beni t ez]
Li st a de al umnos de l a cl ase Vi da Sal udabl e
[ 000123, J uan Per ez, 000125, Lour des Ser r ano, 000135, J ose Si er r a,
000153, Mar i o Lopez, 000170, Ana Beni t ez]
Mapas

Un Mapa es un objeto que asocia o mapea llaves a valores. Un mapa no puede tener
llaves duplicadas. Cada llave puede mapear a cuando mucho un valor.

En la figura 6.8 se muestran las interfaces y clases que implementan los mapas.
Interfaz Map<K, V>

Esta interfaz se encuentre en el tope de la jerarqua de interfaces y las clases que
implementan esas interfaces. Declara los mtodos comunes a todas las
implementaciones de mapas. En la tabla 6.16 se muestran los mtodos declarados por
la interfaz Map<K, V>.


200 Colecciones
ITSON Manuel Domitsu Kono

Figura 6.8





Tema 6 Colecciones 201
ITSON Manuel Domitsu Kono
Tabla 6.16 Mtodos de la Interfaz Map<K, V>
V put ( K key, V val ue)

Asocia el valor del parmetro con la llave del parmetro en este mapa. Si el mapa contena previamente
un mapeo para la llave, el valor que tena asociado se reemplaza por el valor del parmetro. Regresa el
valor previamente asociado con la llave del parmetro o nul l si no haba un mapeo para la llave o si el
valor asociado con la llave era null y el mapa acepta valores nulos.

Lanza:
Unsuppor t edOper at i onExcept i on - Si el mapa no soporta la operacin put ( ) .
Cl assCast Except i on Si la clase de la llave o del valor no permiten que sean almacenadas
en este mapa.
Nul l Poi nt er Except i on Si la llave del parmetro o su valor son nul l . Y este mapa no
soporta llaves o valores nulos.
I l l egal Ar gument Except i on Si alguna propiedad de la llave o valor del parmetro les
impide almacenarlos en el mapa.
V get ( Obj ect key)

Regresa el valor mapeado con la llave del parmetro, o nul l si no haba un mapeo para la llave. Si el
mapa permite valores null, entonces si el mtodo regresa null no necesariamente indica que el mapa no
contiene un mapeo para la llave.

Lanza:
Cl assCast Except i on Si la clase de la llave es de un tipo no apropiado para este mapa.
Nul l Poi nt er Except i on Si la llave del parmetro es nul l y este mapa no soporta llaves
nulas.
V remove( Obj ect key)

Elimina el mapeo para la llave del parmetro, si existe. Regresa el valor previamente mapeado por la
llave del parmetro, o nul l si no haba un mapeo para la llave.

Lanza:
Unsuppor t edOper at i onExcept i on - Si el mapa no soporta la operacin r emove( ) .
Cl assCast Except i on Si la clase de la llave es de un tipo no apropiado para este mapa.
Nul l Poi nt er Except i on Si la llave del parmetro es null y este mapa no soporta llaves
nulas.
i nt size( )

Regresa el nmero de mapeos llave valor en este mapa. Si el mapa contiene ms de de
I nt eger . MAX_VALUE elementos, regresa I nt eger . MAX_VALUE. Regresa el nmero de mapeos llave
valor en este mapa.
bool ean isEmpty( )

Regresa verdadero si este mapa no contiene mapeos llave valor.
bool ean containsKey( Obj ect key)

Regresa verdadero si este mapa no contiene mapeos llave valor.

Lanza:
Cl assCast Except i on Si la clase de la llave es de un tipo no apropiado para este mapa.
Nul l Poi nt er Except i on Si la llave del parmetro es nul l y este mapa no soporta llaves
nulas.

202 Colecciones
ITSON Manuel Domitsu Kono

Tabla 6.16 Mtodos de la Interfaz Map<K, V>. Cont
bool ean containsValue( Obj ect val ue)

Regresa verdadero si este mapa mapea el valor del parmetro a una o ms llaves.

Lanza:
Cl assCast Except i on Si la clase del valor es de un tipo no apropiado para este mapa.
Nul l Poi nt er Except i on Si el valor del parmetro es nul l y este mapa no soporta
valores nulos.
voi d clear( )

Elimina todos los mapeos para este mapa. El mapa quedar vaco despus de la operacin.

Lanza:
Unsuppor t edOper at i onExcept i on - Si el mapa no soporta la operacin cl ear ( ) .
voi d putAll( Map<? ext ends K, ? ext ends V> map)

Copia todos los mapeos del mapa del parmetro a este mapa.

Lanza:
Unsuppor t edOper at i onExcept i on - Si el mapa no soporta la operacin put Al l ( ) .
Cl assCast Except i on Si la clase de la llave o del valor son de un tipo no apropiado para
este mapa.
Nul l Poi nt er Except i on Si el mapa del parmetro es null, o si este mapa no permite llaves
o valores nulos y el mapa del parmetro contiene llaves o valores nulos.
I l l egal Ar gument Except i on Si alguna propiedad de la llave o valor en el mapa del
parmetro les impide almacenarlos en este mapa.
Set <Map. Ent r y<K, V>> entrySet( )

Regresa una vista como conjunto del contenido de este mapa. El conjunto est respaldado por el mapa,
de tal manera que los cambios en el mapa se reflejan en el conjunto y viceversa.
Set <K> keySet( )

Regresa una vista como conjunto de las llaves contenidas en este mapa. El conjunto est respaldado
por el mapa, de tal manera que los cambios en el mapa se reflejan en el conjunto y viceversa.
Col l ect i on<V> values( )

Regresa una vista como coleccion de los valores contenidos de este mapa. El conjunto est respaldado
por el mapa, de tal manera que los cambios en el mapa se reflejan en el conjunto y viceversa.
i nt hashCode( )

Regresa el cdigo Hash para este mapa.
Interfaz Map.Entry<K, V>

Esta interfaz representa una entrada de un mapa (un par llave valor). El mtodo
ent r yset ( ) de la interfaz Map<K, V) regresa una vista de coleccin del mapa,
cuyos elementos son de esta clase. La nica forma de obtener una referencia a una
entrada de un mapa es del iterador de esa vista de coleccin y esa entrada slo es
Tema 6 Colecciones 203
ITSON Manuel Domitsu Kono
vlida durante la iteracin. En la tabla 6.17 se muestran los mtodos declarados por la
interfaz Map. Ent r y<K, E>.

Tabla 6.17 Mtodos de la Interfaz Map.Entry<K, V>
K getKey( )

Regresa la llave correspondiente a esta entrada.

Lanza:
I l l egal St at eExcept i on Si esta entrada ha sido eliminada del mapa correspondiente.
V getValue( )

Regresa el valor correspondiente a esta entrada.

Lanza:
I l l egal St at eExcept i on Si esta entrada ha sido eliminada del mapa correspondiente.
V setValue( V val ue)

Reemplaza el valor corresponiente de esta entrada por el valor del parmetro.

Lanza:
Unsuppor t edOper at i onExcept i on - Si el mapa asociado no soporta la operacin put ( ) .
Cl assCast Except i on Si la clase del valor es de un tipo no apropiado para el mapa
asociado.
Nul l Poi nt er Except i on Si el valor del parmetro es null y el mapa asociado no permite
valores nulos.
I l l egal Ar gument Except i on Si alguna propiedad del valor del parmetro le impide
almacenarlo al mapa asociado.
I l l egal St at eExcept i on Si esta entrada ha sido eliminada del mapa correspondiente.
bool ean equals( Obj ect o)

Compara el objeto del parmetro con esta entrada por igualdad. Regresa verdadero si el objeto del
parmetro es una entrada de un mapa y las dos entradas representan el mismo mapeo. Regresa t r ue
si el objeto del parmetro y este mapa son iguales, f al se en caso contrario.
i nt hashCode( )

Regresa el cdigo Hash para esta entrada de mapa.
Interfaz SortedMap<K, V>

La interfaz Sor t edMap<K, V>garantiza un ordenamiento total en sus llaves. El mapa
est ordenado de acuerdo al ordenamiento natual de sus llaves, o por un comparador
establecido por su constructor.

Todas las llaves que se inserten en un mapa ordenado deben implementar la interfaz
Compar abl e (o ser aceptadas por comparador especificado). En la tabla 6.18 se
muestran los mtodos declarados por la interfaz Sor t ed Map<K, V>.


204 Colecciones
ITSON Manuel Domitsu Kono
Tabla 6.18 Mtodos de la Interfaz SortedMap<K, V>
Compar at or <? super E> comparator( )

Regresa el comparador usado para ordenar las llaves de este mapa ordenado, o null si el mapa usa el
ordenamiento natural para sus llaves.
K firstKey( )

Regresa la primera llave de este mapa ordenado.

Lanza:
NoSuchEl ement Except i on Si el mapa ordenado est vaco.
K lastKey( )

Regresa la ltima llave de este mapa ordenado.

Lanza:
NoSuchEl ement Except i on Si el mapa ordenado est vaco.
Sor t edMap<K, V> headMap( K t oKey)

Regresa una vista de este mapa cuyas llaves sean estrictamente menores que la llave t oKey. El
mapa regresado est respaldado por este mapa, de tal manera que los cambios en el mapa
regresadose reflejan en este mapa y viceversa.

Lanza:
Cl assCast Except i on Si la llave t oKey no es compatible con el comparador del mapa (o si
el mapa no tiene un comparador o la llave t oKey no implementa la interfaz Compar abl e).
Nul l Poi nt er Except i on Si la llave t oKey es null y el mapa asociado no permite llaves
nulas.
I l l egal Ar gument Except i on Si el mapa tiene una restriccin de rango y la llave toKey cae
fuera de los lmites del rango.
Sor t edMap<K, V> tailMap( K f r omKey)

Regresa una vista de este mapa cuyas llaves sean mayores o iguales que la llave t oKey. El mapa
regresado est respaldado por este mapa, de tal manera que los cambios en el mapa regresadose
reflejan en este mapa y viceversa.

Lanza:
Cl assCast Except i on Si la llave t oKey no es compatible con el comparador del mapa (o si
el mapa no tiene un comparador o la llave t oKey no implementa la interfaz Compar abl e).
Nul l Poi nt er Except i on Si la llave t oKey es null y el mapa asociado no permite llaves
nulas.
I l l egal Ar gument Except i on Si el mapa tiene una restriccin de rango y la llave t oKey
cae fuera de los lmites del rango.









Tema 6 Colecciones 205
ITSON Manuel Domitsu Kono
Tabla 6.18 Mtodos de la Interfaz SortedMap<K, V>. Cont.
Sor t edMap<K, V> subMap( K f r omKey, K t oKey)

Regresa una vista de este mapa cuyas llaves estn en el rango de la llave f r omKey, inclusive a la llave
t oKey, excl usi ve. El mapa regresado est respaldado por este mapa, de tal manera que los
cambios en el mapa regresadose reflejan en este mapa y viceversa.

Lanza:
Cl assCast Except i on Si las llaves f r omKey y t oKey no son compatibles con el
comparador del mapa (o si el mapa no tiene un comparador, no pueden compara usando el
orden natural).
Nul l Poi nt er Except i on Si las llaves f r omKey y t oKey son null y el mapa asociado no
permite llaves nulas.
I l l egal Ar gument Except i on Si la llave f r omKey es mayor que t oKey; o el mapa tiene
una restriccin de rango y las llaves f r omKey y t oKey caen fuera de los lmites del rango.

Interfaz NavigableMap<K, V>

La interfaz Navi gabl eMap<K, V>extiende la interfaz Sor t edMap<K, V>con
mtodos de navegacin que regresan las coincidencias ms cercanas para una
bsqueda dada. Un mapa navegable puede accederse ybrecorrerse en orden
ascendente o descendente.

En la tabla 6.19 se muestran los mtodos declarados por la interfaz
Navi gabl eMap<K, V>.

Tabla 6.19 Mtodos de la Interfaz NavigableMap<K, V>
Map. Ent r y<K, V> ceilingEntry( K key)

Regresa una entrada llave valor asociada con la llave menor que sea mayor o igual que la llave del
parmetro, o null si no existe tal llave.

Lanza:
Cl assCast Except i on Si la llave del parmetro no puede compararse con las llaves del
mapa.
Nul l Poi nt er Except i on Si la llave del parmetro es nula y el mapa no admite llaves nulas.
K ceilingKey( K key)

Regresa la llave menor que sea mayor o igual que la llave del parmetro, o null si no existe tal llave.

Lanza:
Cl assCast Except i on Si la llave del parmetro no puede compararse con las llaves del
mapa.
Nul l Poi nt er Except i on Si la llave del parmetro es nula y el mapa no admite llaves
nulas.





206 Colecciones
ITSON Manuel Domitsu Kono
Tabla 6.19 Mtodos de la Interfaz NavigableMap<K, V>. Cont.
Map. Ent r y<K, V> floorEntry( K key)

Regresa una entrada llave valor asociada con la llave mayor que sea menor o igual que la llave del
parmetro, o null si no existe tal llave.

Lanza:
Cl assCast Except i on Si la llave del parmetro no puede compararse con las llaves del
mapa.
Nul l Poi nt er Except i on Si la llave del parmetro es nula y el mapa no admite llaves nulas.
K floorKey( K key)

Regresa la llave mayor que sea menor o igual que la llave del parmetro, o null si no existe tal llave.

Lanza:
Cl assCast Except i on Si la llave del parmetro no puede compararse con las llaves del
mapa.
Nul l Poi nt er Except i on Si la llave del parmetro es nula y el mapa no admite llaves
nulas.
Map. Ent r y<K, V> firstEntry( )

Regresa una entrada llave valor asociada con la llave menor del mapa, o null si el mapa esta vaco.
Map. Ent r y<K, V> lastEntry( )

Regresa una entrada llave valor asociada con la llave mayor del mapa, o null si el mapa esta vaco.
Map. Ent r y<K, V> higherEntry( K key)

Regresa una entrada llave valor asociada con la llave menor que sea mayor que la llave del
parmetro, o null si no existe tal llave.

Lanza:
Cl assCast Except i on Si la llave del parmetro no puede compararse con las llaves del
mapa.
Nul l Poi nt er Except i on Si la llave del parmetro es nula y el mapa no admite llaves nulas.
K higherKey( K key)

Regresa la llave menor que sea mayor que la llave del parmetro, o null si no existe tal llave.

Lanza:
Cl assCast Except i on Si la llave del parmetro no puede compararse con las llaves del
mapa.
Nul l Poi nt er Except i on Si la llave del parmetro es nula y el mapa no admite llaves
nulas.
Map. Ent r y<K, V> lowerEntry( K key)

Regresa una entrada llave valor asociada con la llave menor que sea mayor que la llave del
parmetro, o null si no existe tal llave.

Lanza:
Cl assCast Except i on Si la llave del parmetro no puede compararse con las llaves del
mapa.
Nul l Poi nt er Except i on Si la llave del parmetro es nula y el mapa no admite llaves nulas.


Tema 6 Colecciones 207
ITSON Manuel Domitsu Kono
Tabla 6.19 Mtodos de la Interfaz NavigableMap<K, V>. Cont.
K lowerKey( K key)

Regresa la llave mayor que sea menor que la llave del parmetro, o null si no existe tal llave.

Lanza:
Cl assCast Except i on Si la llave del parmetro no puede compararse con las llaves del
mapa.
Nul l Poi nt er Except i on Si la llave del parmetro es nula y el mapa no admite llaves
nulas.
Map. Ent r y<K, V> pollFirst Ent r y( )

Elimina y regresa la entrada llave valor asociada con la primer (la menor) llave de este mapa, o null si
el mapa est vaco. Regresa la entrada llave valor asociada con la primer (la menor) llave de este
mapa, o null si el mapa est vaco.
Map. Ent r y<K, V> pollLast Ent r y( )

Elimina y regresa la entrada llave valor asociada con la ltima (la mayor) llave de este mapa, o null si
el mapa est vaco. Regresa la entrada llave valor asociada con la ltima (la mayor) llave de este
mapa, o null si el mapa est vaco.
Navi gabl eSet <K> NavigableKeySet( )

Regresa una vista del tipo NavigableSet en orden ascendente de las llaves de este mapa. El conjunto
navegable regresado est respaldado por este mapa. Los cambios en el conjunto se reflejan en el mapa
regresado y viceversa.
Navi gabl eSet <K> descendingKeySet( )

Regresa una vista del tipo NavigableSet en orden invertido de las llaves de este mapa. El conjunto
navegable regresado est respaldado por este mapa. Los cambios en el conjunto se reflejan en el mapa
regresado y viceversa.
Navi gabl eMap<K, V> descendingMap( )

Regresa una vista en orden invertido de las entradas de este mapa. El mapa descendente est
respaldado por este mapa. Los cambios en el mapa se reflejan en el mapa descendente y viceversa.
Navi gabl eMap<K, V> headMap( K t oKey, bool ean i ncl usi ve)

Regresa una vista de la porcin de este mapa cuyas llaves son menores (o iguales si el parmetro
i ncl usi ve es verdadero) que la llave del parmetro. El mapa regresado est respaldado por este
mapa. Los cambios en el mapa se reflejan en el mapa regresado y viceversa.

Lanza:
Cl assCast Except i on Si la llave t oKey no es compatible con el comparador de este mapa
(o si el mapa no tiene comparador, si la llave t oKey no implementa la interfaz comparable).
Nul l Poi nt er Except i on Si la llave t oKey es nula y el mapa no admite llaves nulas.
I l l egal Ar gument Except i on Si este mapa tiene un rango restringido y la llave t oKey cae
fuero del rengo del parmetro.







208 Colecciones
ITSON Manuel Domitsu Kono
Tabla 6.19 Mtodos de la Interfaz NavigableMap<K, V>. Cont.
Navi gabl eMap<K, V> tailMap( K f r omKey, bool ean i ncl usi ve)

Regresa una vista de la porcin de este mapa cuyas llaves son mayores (o iguales si el parmetro
i ncl usi ve es verdadero) que la llave del parmetro. El mapa regresado est respaldado por este
mapa. Los cambios en el mapa se reflejan en el mapa regresado y viceversa.

Lanza:
Cl assCast Except i on Si la llave f r omKey no es compatible con el comparador de este
mapa (o si el mapa no tiene comparador, si la llave f r omKey no implementa la interfaz
comparable).
Nul l Poi nt er Except i on Si la llave f r omKey es nula y el mapa no admite llaves nulas.
I l l egal Ar gument Except i on Si este mapa tiene un rango restringido y la llave f r omKey
cae fuero del rengo del parmetro.
Navi gabl eMap<E> subMap( K f r omKey, bool ean f r omI ncl usi ve,
K t oKey, bool ean t oI ncl usi ve)

Regresa una vista de la porcin de este mapa cuyas llaves estn en el rango de f r omKey a t oKey, si
f r omKey y t oKey son iguales, el mapa regresado es vaco a menos que f r omI ncl usi ve
y t oI ncl usi ve sean ambas verdaderas. El mapa regresado est respaldado por este mapa. Los
cambios en el mapa se reflejan en el mapa regresado y viceversa.

Lanza:
Cl assCast Except i on Si las llaves f r omKey y t oKey no pueden compararse entre s
usando el comparador del mapa (o si el mapa no tiene comparador o, usando el ordenamiento
natural).
Nul l Poi nt er Except i on Si f r omKey o t oKey son nulas y el mapa no admite llaves
nulas.
I l l egal Ar gument Except i on Si f r omKey es mayor que t oKey, o si este mapa tiene un
rango restringido y f r omKey o t oKey caen fuera del rengo del parmetro.
Clase HashMap<K, V>

Esta clase implementa la interfaz Map, sobre una Tabla Hash. No hay garantas sobre
el orden de iteracin del conjunto; en particular no hay garanta que el orden
permanecera constante con el tiempo. Esta clase permite llaves y valores nulos.

En la tabla 6.20 se muestran los mtodos exclusivos de la clase HashSet <E>.

Tabla 6.20 Mtodos exclusivos de la Clase HashMap<E>
HashMap( )

Construye un mapa vaco con una capacidad inicial de 16 y un factor de carga de 0.75.
HashMap( Map<? ext ends K, ? ext ends V> map)

Construye un mapa que contiene los mismos mapeos que el mapa del parmetro. El factor de carga es
de 0.75. El mapa tiene una capacidad inicial a suficiente para contener los mapeos del mapa del
parmetro.

Lanza:
Nul l Poi nt er Except i on Si el mapa del parmetro es nulo.
Tema 6 Colecciones 209
ITSON Manuel Domitsu Kono
Tabla 6.20 Mtodos exclusivos de la Clase HashMap<E>
HashSet( i nt inicialCapacity, f l oat l oadf act or )

Construye un mapa vaco con la capacidad inicial y factor de carga dados por los parmetros.

Lanza:
I l l egal Ar gument Except i on Si el valor de la capacidad inicial es negativo o el factor de
carga sea no positivo.
HashSet( i nt inicialCapacity)

Construye un mapa vaco con la capacidad inicial dada por el parmetro y un factor de carga de 0.75.

Lanza:
I l l egal Ar gument Except i on Si el valor de la capacidad inicial es negativo.
Obj ect cl one( )

Regresa una copia del conjunto. Las llaves y valores del mapa no son copiados.
Clase TreeMap<K, V>

Esta clase implementa la interfaz Navi gabl eMap, sobre un rbol Rojo - Negro. Esta
clase garantiza que el mapa estar ordenado en orden ascendente, de acuerdo al
orden natural de sus elementos o por un comparador establecido en el constructor.
En la tabla 6.21 se muestran los mtodos exclusivos de la interfaz Tr eeMap<K, V>.

Tabla 6.21 Mtodos exclusivos de la Clase TreeMap<K, V>
TreeMap( )

Construye un nuevo mapa vaco ordenado de acuerdo al orden natural de sus llaves.
TreeMap( Map<? ext ends K, ? ext ends V> m)

Construye un nuevo mapa con los mapeos del mapa del parmetro, ordenados de acuerdo al orden
natural de sus llaves.

Lanza:
Cl assCast Except i on Si las llaves del mapa del parmetro no son comparables o no son
mutuamente comparables.
Nul l Poi nt er Except i on Si el mapa del parmetro es nula.
TreeMap( Compar at or <? super K> compar at or )

Construye un nuevo mapa vaco, ordenado de acuerdo al comparador del parmetro.
TreeSet( Sor t edMap<K, ? ext ends V> map)

Construye un nuevo mapa con los mapeos del mapa ordenado del parmetro, ordenados de acuerdo al
mismo orden.

Lanza:
Nul l Poi nt er Except i on Si conjunto ordenado del parmetro es nulo.
Obj ect cl one( )

Regresa una copia del conjunto. Las llaves y valores del mapa no son copiados.
210 Colecciones
ITSON Manuel Domitsu Kono
Ejemplos Sobre Mapas

El siguiente programa cuenta el nmero de veces que cada palabra aparece en una
lista de cadenas.

/ *
* Cuent aPal abr as. j ava
*
* @aut hor mdomi t su
*/

package obj et osNegoci o;

i mpor t j ava. ut i l . Li st ;
i mpor t j ava. ut i l . Map;
i mpor t j ava. ut i l . Tr eeMap;

/ **
* Est a cl ase cont abi l i za l as pal abr as di f er ent es del t ext o cont eni do
* en una l i st a de cadenas
*/
publ i c cl ass Cuent aPal abr as {
Map<St r i ng, I nt eger > mapaPal abr as;
Li st <St r i ng> t ext o;

/ **
* I ni ci al i za l a cl ase con el t ext o cont eni do en una l i st a de cadenas
* @par amt ext o Li st a de cadenas con el t ext o a pr ocesar
*/
publ i c Cuent aPal abr as( Li st <St r i ng> t ext o) {
t hi s. t ext o = t ext o;
mapaPal abr as = new Tr eeMap( ) ;
}

/ **
* Regr esa l as pal abr as cont eni das en el t ext o y su cuent a
* @r et ur n Las pal abr as cont eni das en el t ext o y su cuent a
*/
publ i c Map<St r i ng, I nt eger > get MapaPal abr as( ) {
r et ur n mapaPal abr as;
}

/ **
* Est e mt odo pr ocesa l as cadenas de l a l i st a
*/
publ i c voi d pr ocesaText o( ) {
f or ( St r i ng l i nea: t ext o) {
pr ocesaLi nea( l i nea) ;
}
}

/ **
* Est e met odo pr ocesa una cadena encont r ando l a cuent a de cada pal abr a
* di f er ent e
* @par aml i nea Cadena a pr ocesar
Tema 6 Colecciones 211
ITSON Manuel Domitsu Kono
*/
publ i c voi d pr ocesaLi nea( St r i ng l i nea) {
i nt pos1 = 0;
i nt pos2;
bool ean cont i nua = t r ue;
St r i ng pal abr a;

/ / Mi ent r as no se haya l l egado al f i nal de l a cadena
whi l e( cont i nua) {
/ / Det er mi na donde t er mi na l a pal abr a
pos2 = l i nea. i ndexOf ( ' ' , pos1) ;

/ / Obt i ene l a pal abr a
i f ( pos2 < 0) {
pal abr a = l i nea. subst r i ng( pos1) ;
cont i nua = f al se;
}
el se pal abr a = l i nea. subst r i ng( pos1, pos2) ;

/ / Si l a pal abr a es nueva
i f ( ! mapaPal abr as. cont ai nsKey( pal abr a) ) {
mapaPal abr as. put ( pal abr a, 1) ;
}
/ / Si l a pal abr a est a r epet i da
el se {
i nt n = mapaPal abr as. get ( pal abr a) ;
mapaPal abr as. put ( pal abr a, n+1) ;
}

pos1 = pos2+1;
}
}
}

Para probar los mtos de la clase Cuent aPal abr as se tiene la siguiente clase de
prueba:

/ *
* Pr ueba. j ava
*/

package pr uebas;

i mpor t j ava. ut i l . Ar r ayLi st ;
i mpor t j ava. ut i l . Li st ;
i mpor t j ava. ut i l . Map;
i mpor t obj et osNegoci o. Cuent aPal abr as;

/ **
*
* @aut hor mdomi t su
*/
publ i c cl ass Pr ueba {

/ **
* @par amar gs t he command l i ne ar gument s
212 Colecciones
ITSON Manuel Domitsu Kono
*/
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) {
Li st <St r i ng> t ext o = new Ar r ayLi st <St r i ng>( ) ;

t ext o. add( " el cabal l o cor r e por el campo" ) ;
t ext o. add( " mi mama me mi ma" ) ;

Cuent aPal abr as cuent aPal abr as = new Cuent aPal abr as( t ext o) ;

cuent aPal abr as. pr ocesaText o( ) ;

Map<St r i ng, I nt eger > mapaPal abr as = cuent aPal abr as. get MapaPal abr as( ) ;

Syst em. out . pr i nt l n( " Pal abr as encont r adas: " ) ;
Syst em. out . pr i nt l n( mapaPal abr as) ;
}
}

La corrida del programa genera la siguiente salida:

Pal abr as encont r adas:
{cabal l o=1, campo=1, cor r e=1, el =2, mama=1, me=1, mi =1, mi ma=1, por =1}

Clase Collections

Esta clase contiene slo mtodos estticos que operan sobre o regresan collecciones.
Contienen algoritmos polimrficos que operan sobre colecciones, clases que
encapsulan colecciones, que regresan una coleccin nueva basada en una coleccin
dada y otros mtodos adicionales. Todos los mtodos de esta clase lanzan una
excepcin del tipo Nul l Poi nt er Except i on si la coleccin o clase de sus parmetros
son nulas. Algunos de los mtodos de esta clase semuestran en el diagrama de clases
de la figura 6.9 y su descripcin se encuentra en la tabla 6.15.

Tema 6 Colecciones 213
ITSON Manuel Domitsu Kono
Figura 6.9

Tabla 6.22 Mtodos de la Clase Collections
publ i c st at i c <T> i nt
binarySearch( Li st <? ext ends Compar abl e<? super T>> l i st , T key)
publ i c st at i c <T> i nt
binarySearch( Li st <? ext ends T> l i st , T key, Compar at or <? super T> c)

Busca en la lista del parmetro l i st al elemento del parmetro key usando el algoritmo de bsqueda
binaria. La lista debe estar previamente ordenada en orden ascendente de acuerdo con el ordenamiento
natural de sus elementos, en el primer mtodo o de acuerdo al comparador del parmetro c del
segundo mtodo. Si la lista no est ordenada, los resultados no estn definidos. Si la lista contiene
elementos repetidos iguales al elemento del parmetro, no hay garanta de cual ser encontrado.

Regresan el ndice del elemento buscado, si existe en la lista; de otro modo el valor (( punt o de
i nser ci n) - 1). El punto de insercin se define como el punto en el cual el elemento buscado se
insertara en la lista.

Lanza:
Cl assCast Except i on - Si la lista contiene elementos que no son mutuamente comparables
(por ejemplo, cadenas con enteros), o el elemento buscado no es mutaumente comparable con
los elementos de la lista.
publ i c st at i c <T> voi d copy( Li st <? super T> dest , Li st <? ext ends T> sr c)

Copia todos los elementos de la lista dada por el parmetro sr c a la lista dada por el parmetro dest .
La lista destino debe ser al menos tan grande como la lista origen. Si es mayor el resto de los elementos
no seven afectados.

Lanza:
I ndexOut Of BoundsExcept i on Si la lista destino no es lo suficientemente grande para
contener la lista origen.
Unsuppor t edOper at i onExcept i on Si el iterador de lista no soporta la operacin set ( ) .
publ i c st at i c bool ean disjoint( Col l ect i on<?> c1, Col l ect i on<?> c2)

Regresa verdadero si si las dos colecciones de sus parmetros c1 y c2 no tienen elementos en comn.
publ i c st at i c <T> voi d fill( Li st <? super T> l i st , T obj )

Reemplaza todos los elementos de la lista del parmetro l i st con el valor del parmetro obj .

Lanza:
Unsuppor t edOper at i onExcept i on Si el iterador de lista no soporta la operacin set ( ) .
publ i c st at i c i nt frequency( Col l ect i on<?> c, Obj ect o)

Regresa el nmero de elementos de la coleccin del parmetro c que son iguales al objeto del
parmetro o.







214 Colecciones
ITSON Manuel Domitsu Kono
Tabla 6.22 Mtodos de la Clase Collections. Cont.
publ i c st at i c <T ext ends Obj ect & Compar abl e<? super T>> T
max( Col l ect i on<? ext ends T> col l )
publ i c st at i c <T> T max( Col l ect i on<? ext ends T> col l ,
Compar at or <? super T> comp)

Regresan el elemento mximo de la coleccin dada por el parmetro col l , de acuerdo con el
ordenamiento natural de sus elementos, en el primer mtodo o de acuerdo al comparador del parmetro
comp del segundo mtodo. En el primer mtodo mtodo, todos los elementos de lista deben
implementar la interfaz Compar abl e y ser mutuamente comparables. En el segundo mtodo todos los
elementos de la lista deben ser mutuamente comparables usando el comparador del parmetro comp.

Lanza:
Cl assCast Except i on - Si la lista contiene elementos que no son mutuamente comparables.
NoSuchEl ement Except i on Si la coleccin est vaca.
publ i c st at i c <T ext ends Obj ect & Compar abl e<? super T>> T
min( Col l ect i on<? ext ends T> col l )
publ i c st at i c <T> T min( Col l ect i on<? ext ends T> col l ,
Compar at or <? super T> comp)

Regresan el elemento minimo de la coleccin dada por el parmetro col l , de acuerdo con el
ordenamiento natural de sus elementos, en el primer mtodo o de acuerdo al comparador del parmetro
comp del segundo mtodo. En el primer mtodo mtodo, todos los elementos de lista deben
implementar la interfaz Compar abl e y ser mutuamente comparables. En el segundo mtodo todos los
elementos de la lista deben ser mutuamente comparables usando el comparador del parmetro comp.

Lanza:
Cl assCast Except i on - Si la lista contiene elementos que no son mutuamente comparables.
NoSuchEl ement Except i on Si la coleccin est vaca.
publ i c st at i c <T> bool ean replaceAll( Li st <T> l i st , T ol dVal , T newVal )

Reemplaza todas las ocurrencias del elemento dado por el parmetro ol dVal por el elemento dado por
el parmetro newVal de la lista del parmetro l i st .

Regresa:
t r ue si se hizo algn reemplazo, f al se en caso contrario.

Lanza:
Unsuppor t edOper at i onExcept i on Si el iterador de lista no soporta la operacin set ( ) .
publ i c st at i c voi d reverse( Li st <?> l i st )

Invierte el orden delos elementos de la lista.

Lanza:
Unsuppor t edOper at i onExcept i on Si el iterador de lista no soporta la operacin set ( ) .







Tema 6 Colecciones 215
ITSON Manuel Domitsu Kono
Tabla 6.22 Mtodos de la Clase Collections. Cont.
publ i c st at i c <T ext ends Compar abl e<? super T>> voi d sort( Li st <T> l i st )
publ i c st at i c <T> voi d sort( Li st <T> l i st , Compar at or <? super T> c)

Ordena la lista del parmetro l i st en orden ascendente, de acuerdo con el ordenamiento natural de
sus elementos, en el primer mtodo o de acuerdo al comparador del parmetro c del segundo mtodo.
En el primer mtodo mtodo, todos los elementos de lista deben implementar la interfaz Compar abl e y
ser mutuamente comparables. En el segundo mtodo todos los elementos de la lista deben ser
mutuamente comparables usando el comparador del parmetro c.

Lanza:
Cl assCast Except i on - Si la lista contiene elementos que no son mutuamente comparables
(por ejemplo, cadenas con enteros), o el elemento buscado no es mutaumente comparable con
los elementos de la lista.
Unsuppor t edOper at i onExcept i on Si el iterador de lista no soporta la operacin set ( ) .
publ i c st at i c voi d swap( Li st <?> l i st , i nt i , i nt j )

Intercambia los elementos cuyas posiciones estn dadas por los parmetros i y j de la lista dada por el
parmetro l i st .

Lanza:
I ndexOut Of BoundsExcept i on Si alguno de los parmetros i o j estn fuera de rango.
Ejemplos Sobre la Clase Collections

En el siguiente ejemplo se ilustrar el uso de de los mtodos sor t ( ) y r ever se( )
para ordenar una lista de canciones por algunos de sus atributos en orden ascendente
y descendente. Para poder ordenar las canciones de la lista se requiere poder
comparar las canciones de acuerdo a un atributo. Para ello crearemos una serie de
clases que implementen la interfaz Compar at or , una para cada uno de los atributos
por la que deseemos ordenar la lista de canciones. Algunas de esas clases comparan
instancias de la clase Medi o que es la clase padre de las clases Canci on y Pel i cul a
por lo que pueden usarse para ordenar listas de canciones y de pelculas.

ComparaMediosClave.java
/ *
* Compar aMedi osCl ave. j ava
*/

package compar ador es;

i mpor t j ava. ut i l . Compar at or ;
i mpor t obj et osNegoci o. Medi o;

/ **
* Est a cl ase compar a dos medi os por su cl ave
* @aut hor mdomi t su
*/
publ i c cl ass Compar aMedi osCl ave i mpl ement s Compar at or <Medi o> {
/ **
* Est e mt odo compar a dos medi os por su cl ave
* @par amm1 Medi o 1 a compar ar
216 Colecciones
ITSON Manuel Domitsu Kono
* @par amm2 Medi o 2 a compar ar
* @r et ur n Regr esa un ent er o negat i vo, cer o, o un ent er o posi t i vo
* si el medi o m1 es menor que, i gual a, o mayor que el medi o m2
*/
publ i c i nt compar e( Medi o m1, Medi o m2) {
r et ur n m1. get Cl ave( ) . compar eTo( m2. get Cl ave( ) ) ;
}
}

ComparaMediosTitulo.java
/ *
* Compar aMedi osTi t ul o. j ava
*/

package compar ador es;

i mpor t j ava. ut i l . Compar at or ;
i mpor t obj et osNegoci o. Medi o;

/ **
* Est a cl ase compar a dos medi os por su t i t ul o
* @aut hor mdomi t su
*/
publ i c cl ass Compar aMedi osTi t ul o i mpl ement s Compar at or <Medi o> {
/ **
* Est e mt odo compar a dos medi os por su t i t ul o
* @par amm1 Medi o 1 a compar ar
* @par amm2 Medi o 2 a compar ar
* @r et ur n Regr esa un ent er o negat i vo, cer o, o un ent er o posi t i vo
* si el medi o m1 es menor que, i gual a, o mayor que el medi o m2
*/
publ i c i nt compar e( Medi o m1, Medi o m2) {
r et ur n m1. get Ti t ul o( ) . compar eTo( m2. get Ti t ul o( ) ) ;
}
}


ComparaMediosGenero.java
/ *
* Compar aMedi osGener o. j ava
*/

package compar ador es;

i mpor t j ava. ut i l . Compar at or ;
i mpor t obj et osNegoci o. Medi o;

/ **
* Est a cl ase compar a dos medi os por su gener o
* @aut hor mdomi t su
*/
publ i c cl ass Compar aMedi osGener o i mpl ement s Compar at or <Medi o> {
/ **
* Est e mt odo compar a dos medi os por su gener o
* @par amm1 Medi o 1 a compar ar
Tema 6 Colecciones 217
ITSON Manuel Domitsu Kono
* @par amm2 Medi o 2 a compar ar
* @r et ur n Regr esa un ent er o negat i vo, cer o, o un ent er o posi t i vo
* si el medi o m1 es menor que, i gual a, o mayor que el medi o m2
*/
publ i c i nt compar e( Medi o m1, Medi o m2) {
r et ur n
m1. get Gener o( ) . get CveGener o( ) . compar eTo( m2. get Gener o( ) . get CveGener o( ) ) ;
}
}

ComparaMediosFecha.java
/ *
* Compar aMedi osFecha. j ava
*/

package compar ador es;

i mpor t j ava. ut i l . Compar at or ;
i mpor t obj et osNegoci o. Medi o;

/ **
* Est a cl ase compar a dos medi os por su f echa
* @aut hor mdomi t su
*/
publ i c cl ass Compar aMedi osFecha i mpl ement s Compar at or <Medi o> {
/ **
* Est e mt odo compar a dos medi os por su f echa
* @par amm1 Medi o 1 a compar ar
* @par amm2 Medi o 2 a compar ar
* @r et ur n Regr esa un ent er o negat i vo, cer o, o un ent er o posi t i vo
* si el medi o m1 es menor que, i gual a, o mayor que el medi o m2
*/
publ i c i nt compar e( Medi o m1, Medi o m2) {
r et ur n m1. get Fecha( ) . compar eTo( m2. get Fecha( ) ) ;
}
}

ComparaCancionesInterprete.java
/ *
* Compar aCanci onesI nt er pr et e. j ava
*/

package compar ador es;

i mpor t j ava. ut i l . Compar at or ;
i mpor t obj et osNegoci o. Canci on;

/ **
* Est a cl ase compar a dos canci ones por su i nt er pr et e
* @aut hor mdomi t su
*/
publ i c cl ass Compar aCanci onesI nt er pr et e i mpl ement s Compar at or <Canci on> {
/ **
* Est e mt odo compar a dos canci ones por su i nt er pr et e
* @par amc1 Canci on 1 a compar ar
* @par amc2 Canci on 2 a compar ar
218 Colecciones
ITSON Manuel Domitsu Kono
* @r et ur n Regr esa un ent er o negat i vo, cer o, o un ent er o posi t i vo
* si l a canci on c1 es menor que, i gual a, o mayor que l a canci n c2
*/
publ i c i nt compar e( Canci on c1, Canci on c2) {
r et ur n c1. get I nt er pr et e( ) . compar eTo( c2. get I nt er pr et e( ) ) ;
}
}

ComparaCancionesAlbum.java
/ *
* Compar aCanci onesAl bum. j ava
*/

package compar ador es;

i mpor t j ava. ut i l . Compar at or ;
i mpor t obj et osNegoci o. Canci on;

/ **
* Est a cl ase compar a dos canci ones por su al bum
* @aut hor mdomi t su
*/
publ i c cl ass Compar aCanci onesAl bumi mpl ement s Compar at or <Canci on> {
/ **
* Est e mt odo compar a dos canci ones por su al bum
* @par amc1 Canci on 1 a compar ar
* @par amc2 Canci on 2 a compar ar
* @r et ur n Regr esa un ent er o negat i vo, cer o, o un ent er o posi t i vo
* si l a canci on c1 es menor que, i gual a, o mayor que l a canci n c2
*/
publ i c i nt compar e( Canci on c1, Canci on c2) {
r et ur n c1. get Al bum( ) . compar eTo( c2. get Al bum( ) ) ;
}
}

En el siguiente fragmento de cdigo muestra como ordenar la lista de canciones por
sus diferentes atributos usando los comparadores anteriores.

Prueba4.java
/ *
* Pr ueba. j ava
*/
package pr uebas;

i mpor t compar ador es. Compar aCanci onesAl bum;
i mpor t compar ador es. Compar aCanci onesI nt er pr et e;
i mpor t compar ador es. Compar aMedi osCl ave;
i mpor t compar ador es. Compar aMedi osFecha;
i mpor t compar ador es. Compar aMedi osGener o;
i mpor t compar ador es. Compar aMedi osTi t ul o;
i mpor t excepci ones. Per si st enci aExcept i on;
i mpor t i nt er f aces. I Per si st enci a;
i mpor t j ava. ut i l . Col l ect i ons;
i mpor t j ava. ut i l . Li st ;
i mpor t obj et osNegoci o. Canci on;
Tema 6 Colecciones 219
ITSON Manuel Domitsu Kono
i mpor t obj et osNegoci o. Gener o;
i mpor t obj et osSer vi ci o. Fecha;
i mpor t per si st enci a. Per si st enci aLi st as;

/ **
*
* @aut hor mdomi t su
*/
publ i c cl ass Pr ueba4 {

/ **
* @par amar gs t he command l i ne ar gument s
*/
publ i c st at i c voi d mai n( St r i ng[ ] ar gs) {
Pr ueba4 pr ueba4 = new Pr ueba4( ) ;

/ / Cr ean l a f achada de l os obj et os que per mi t en al macenar l as
/ / canci ones y pel i cul as en ar r egl os
I Per si st enci a f achada = new Per si st enci aLi st as( ) ;
Li st <Canci on> l i st aCanci ones = nul l ;
. . .

t r y {
/ / Obt i ene l a l i st a de canci ones de l a BD
l i st aCanci ones = f achada. consul t aCanci ones( ) ;

/ / Despl i ega l a l i st a de canci ones
Syst em. out . pr i nt l n( " Li st a de canci ones: " ) ;
Syst em. out . pr i nt l n( l i st aCanci ones) ;

/ / Or dena l a l i st a de canci ones por su cl ave
Col l ect i ons. sor t ( l i st aCanci ones, new Compar aMedi osCl ave( ) ) ;

/ / Despl i ega l a l i st a de canci ones or denada por su cl ave
Syst em. out . pr i nt l n( " Li st a de canci ones or denadas por cl ave: " ) ;
Syst em. out . pr i nt l n( l i st aCanci ones) ;

/ / Or dena l a l i st a de canci ones por su t i t ul o
Col l ect i ons. sor t ( l i st aCanci ones, new Compar aMedi osTi t ul o( ) ) ;

/ / Despl i ega l a l i st a de canci ones or denada por su t i t ul o
Syst em. out . pr i nt l n( " Li st a de canci ones or denadas por t i t ul o: " ) ;
Syst em. out . pr i nt l n( l i st aCanci ones) ;

/ / Or dena l a l i st a de canci ones por su t i t ul o en or den i nver so
Col l ect i ons. r ever se( l i st aCanci ones) ;

/ / Despl i ega l a l i st a de canci ones or denada por su t i t ul o en or den
/ / i nver so
Syst em. out . pr i nt l n(
" Li st a de canci ones or denadas por t i t ul o en or den i nver so: " ) ;
Syst em. out . pr i nt l n( l i st aCanci ones) ;

/ / Or dena l a l i st a de canci ones por su gener o
Col l ect i ons. sor t ( l i st aCanci ones, new Compar aMedi osGener o( ) ) ;

/ / Despl i ega l a l i st a de canci ones or denada por su gener o
220 Colecciones
ITSON Manuel Domitsu Kono
Syst em. out . pr i nt l n( " Li st a de canci ones or denadas por gener o: " ) ;
Syst em. out . pr i nt l n( l i st aCanci ones) ;

/ / Or dena l a l i st a de canci ones por su f echa
Col l ect i ons. sor t ( l i st aCanci ones, new Compar aMedi osFecha( ) ) ;

/ / Despl i ega l a l i st a de canci ones or denada por su f echa
Syst em. out . pr i nt l n( " Li st a de canci ones or denadas por f echa: " ) ;
Syst em. out . pr i nt l n( l i st aCanci ones) ;

/ / Or dena l a l i st a de canci ones por su i nt er pr et e
Col l ect i ons. sor t ( l i st aCanci ones, new Compar aCanci onesI nt er pr et e( ) ) ;

/ / Despl i ega l a l i st a de canci ones or denada por su i nt er pr et e
Syst em. out . pr i nt l n( " Li st a de canci ones or denadas por i nt er pr et e: " ) ;
Syst em. out . pr i nt l n( l i st aCanci ones) ;

/ / Or dena l a l i st a de canci ones por su al bum
Col l ect i ons. sor t ( l i st aCanci ones, new Compar aCanci onesAl bum( ) ) ;

/ / Despl i ega l a l i st a de canci ones or denada por su al bum
Syst em. out . pr i nt l n( " Li st a de canci ones or denadas por al bum: " ) ;
Syst em. out . pr i nt l n( l i st aCanci ones) ;
} cat ch ( Per si st enci aExcept i on f e) {
/ / Muest r a el mensaj e de er r or ami st oso
Syst em. out . pr i nt l n( " Er r or : " + f e. get Message( ) ) ;
}
}
}

El fragmento de cdigo anterior prodce la siguiente salida:

. . .

Li st a de canci ones:
[ CBB0001, The l ong and wi ndi ng r oad, Bal ada, 3, 24/ 3/ 1970, The Beat l es, J ohn
Lennon, Let i t be, CSD0002, Gar ot a de I panema, Bossanova, 3, 1/ 12/ 1970, Los
I ndi os Tabaj ar as, Ant oni o Car l os J obi m, Bossanova J azz Vol . 1, CSB0003,
Desaf i nado, Bossanova, 3, 3/ 12/ 1980, J oao Gi l ber t o, J oao Gi l ber t o, Bossanova
J azz Vol . 1]
Li st a de canci ones or denadas por cl ave:
[ CBB0001, The l ong and wi ndi ng r oad, Bal ada, 3, 24/ 3/ 1970, The Beat l es, J ohn
Lennon, Let i t be, CSB0003, Desaf i nado, Bossanova, 3, 3/ 12/ 1980, J oao
Gi l ber t o, J oao Gi l ber t o, Bossanova J azz Vol . 1, CSD0002, Gar ot a de I panema,
Bossanova, 3, 1/ 12/ 1970, Los I ndi os Tabaj ar as, Ant oni o Car l os J obi m,
Bossanova J azz Vol . 1]
Li st a de canci ones or denadas por t i t ul o:
[ CSB0003, Desaf i nado, Bossanova, 3, 3/ 12/ 1980, J oao Gi l ber t o, J oao Gi l ber t o,
Bossanova J azz Vol . 1, CSD0002, Gar ot a de I panema, Bossanova, 3, 1/ 12/ 1970,
Los I ndi os Tabaj ar as, Ant oni o Car l os J obi m, Bossanova J azz Vol . 1, CBB0001,
The l ong and wi ndi ng r oad, Bal ada, 3, 24/ 3/ 1970, The Beat l es, J ohn Lennon,
Let i t be]
Li st a de canci ones or denadas por t i t ul o en or den i nver so:
[ CBB0001, The l ong and wi ndi ng r oad, Bal ada, 3, 24/ 3/ 1970, The Beat l es, J ohn
Lennon, Let i t be, CSD0002, Gar ot a de I panema, Bossanova, 3, 1/ 12/ 1970, Los
I ndi os Tabaj ar as, Ant oni o Car l os J obi m, Bossanova J azz Vol . 1, CSB0003,
Tema 6 Colecciones 221
ITSON Manuel Domitsu Kono
Desaf i nado, Bossanova, 3, 3/ 12/ 1980, J oao Gi l ber t o, J oao Gi l ber t o, Bossanova
J azz Vol . 1]
Li st a de canci ones or denadas por gener o:
[ CBB0001, The l ong and wi ndi ng r oad, Bal ada, 3, 24/ 3/ 1970, The Beat l es, J ohn
Lennon, Let i t be, CSD0002, Gar ot a de I panema, Bossanova, 3, 1/ 12/ 1970, Los
I ndi os Tabaj ar as, Ant oni o Car l os J obi m, Bossanova J azz Vol . 1, CSB0003,
Desaf i nado, Bossanova, 3, 3/ 12/ 1980, J oao Gi l ber t o, J oao Gi l ber t o, Bossanova
J azz Vol . 1]
Li st a de canci ones or denadas por f echa:
[ CBB0001, The l ong and wi ndi ng r oad, Bal ada, 3, 24/ 3/ 1970, The Beat l es, J ohn
Lennon, Let i t be, CSD0002, Gar ot a de I panema, Bossanova, 3, 1/ 12/ 1970, Los
I ndi os Tabaj ar as, Ant oni o Car l os J obi m, Bossanova J azz Vol . 1, CSB0003,
Desaf i nado, Bossanova, 3, 3/ 12/ 1980, J oao Gi l ber t o, J oao Gi l ber t o, Bossanova
J azz Vol . 1]
Li st a de canci ones or denadas por i nt er pr et e:
[ CSB0003, Desaf i nado, Bossanova, 3, 3/ 12/ 1980, J oao Gi l ber t o, J oao Gi l ber t o,
Bossanova J azz Vol . 1, CSD0002, Gar ot a de I panema, Bossanova, 3, 1/ 12/ 1970,
Los I ndi os Tabaj ar as, Ant oni o Car l os J obi m, Bossanova J azz Vol . 1, CBB0001,
The l ong and wi ndi ng r oad, Bal ada, 3, 24/ 3/ 1970, The Beat l es, J ohn Lennon,
Let i t be]
Li st a de canci ones or denadas por al bum:
[ CSB0003, Desaf i nado, Bossanova, 3, 3/ 12/ 1980, J oao Gi l ber t o, J oao Gi l ber t o,
Bossanova J azz Vol . 1, CSD0002, Gar ot a de I panema, Bossanova, 3, 1/ 12/ 1970,
Los I ndi os Tabaj ar as, Ant oni o Car l os J obi m, Bossanova J azz Vol . 1, CBB0001,
The l ong and wi ndi ng r oad, Bal ada, 3, 24/ 3/ 1970, The Beat l es, J ohn Lennon,
Let i t be]
. . .

Anda mungkin juga menyukai