Anda di halaman 1dari 13

Genricos y Colecciones

jueves, 3 de septiembre de 2009 by Matas Emiliano Alvarez Durn


A continuacin dejo el resumen del sptimo captulo (Generics and Collections) del libro
"Sun
Certified
Programmer
for
Java
6
Study
Guide".
Sobreescribiendo
hashCode()
y
equals()
Mtodos de la clase Object que se necesitan saber para el examen:

(Objetivo

6.2):

boolean equals(Object obj)


void finalize()
int hashCode()
final void notify()
final void notifyAll()
final void wait()
String toString()

Mtodo
equals()
El operador == permite evaluar si dos referencias son iguales, es decir, cuando se refieren al
mismo objeto. Para comparar si dos objetos son iguales, si los objetos en s mismo son
idnticos,
se
utiliza
el
mtodo
equals().
La clase String y todas las clases envoltorios (wrappers) de tipos primitivos, tienen el mtodo
equals() redefinido. Por esto mismo se pueden comparar si dos objetos tienen un mismo
estado.
Si se quiere utilizar (de manera correcta) un objeto como clave en una coleccin hash, se debe
sobreescribir el mtodo equals(), para de este modo permitir considerar dos instancias iguales.
Mtodo
hashCode()
Generalmente los hashcodes son utilizados para mejorar la performance de grandes
colecciones de informacin. Este cdigo se utiliza para determinar donde se guardar el
objeto dentro de una coleccin (HashMap, HashSet o sus subtipos), y como se debe localizar.
Para el examen se debe saber que colecciones lo utilizan, y diferenciar los usos apropiados o
correctos
de
los
legales.
Colecciones
Tipos de colecciones:

(Objetivo

6.1):

List: Sus operaciones estn basadas en los ndices de los elementos en la coleccin.
Todas sus implementaciones tienen sus ndices ordenados. Cuando se agrega un
elemento a la coleccin se puede hacer especificando el ndice en el cual tiene que
estar, o sin especificarlo (en este caso se posiciona al final).
- ArrayList: Provee una rpida iteracin y un rpido acceso aleatorio. Pero es ms
1

lento
para
insertar
y
quitar
elementos
que
LinkedList.
- Vector: Es una coleccin primitiva de las primeras versiones de java. Es bsicamente
similar a ArrayList, salvo que todos sus mtodos estn sincronizados para el manejo
seguro
de
hilos
(thread
safe).
- LinkedList: Es una coleccin como ArrayList, excepto porque sus elementos se
encuentran doblemente ligados (uno con otro). Este doble vinculo otorga nuevos
mtodos para agregar o quitar elementos del principio o el final. Su iteracin es ms
lenta que ArrayList. A partir de Java 5, esta coleccin implementa la interface Queue.
De esta manera puede ser tratada como una cola, y posee los mtodos: peek(), poll() y
offer().
Set: Es un conjunto de elementos nicos. Es decir, no se permiten objetos duplicados.
Para lograr este comportamiento se utiliza el mtodo equals(), que permite verificar si
dos
instancias
son
idnticas.
- HashSet: Es una coleccin que no mantiene un orden especfico. Utiliza el cdigo
de hash de los objetos insertados. Por este motivo mientras ms eficiente sea la
implementacin del mtodo hashCode(), mejor ser la performance de acceso. Es til
cuando se necesita una coleccin sin elementos duplicados y en la cual no importe el
orden
de
iteracin.
- LinkedHashSet: Es la versin ordenada de HashSet. Mantiene un doble enlace entre
sus elementos como si fuera una lista. Es til cuando se necesita (a diferencia de
HashSet) una coleccin en donde el orden de iteracin sea importante.
- TreeSet: Es una coleccin que contiene sus elementos ordenados. Utiliza un rbol de
estructura rojo-negro, y garantiza que los elementos se encuentren en orden
ascendente, de acuerdo a su orden natural. A partir de Java 6, esta coleccin
implementa NavigableSet.
Map: Son colecciones con elementos compuestos de parejas clave/valor. Las claves
de los elementos son nicas. Al igual que la interface Set, utiliza el mtodo equals()
para determinar si dos objetos son iguales. Muchas de sus operaciones estn basadas
en
las
claves.
- HashMap: Es una coleccin que no mantiene un orden especfico. Utiliza el cdigo
de hash sobre las claves, para determinar el orden de sus elementos. Es til cuando se
necesita un mapa en el cul no importe el orden de iteracin. Permite un solo valor
null
como
clave,
y
multiples
valores
null
en
la
coleccin.
- Hastable: Como la clase Vector, es una implementacin de las primeras versiones de
java. Es similar a HashMap, a diferencia que sus mtodos se encuentran
sincronizados. Otra de las diferencias es que no permite valores null tanto en la claves
como
en
los
valores.
- LinkedHashMap: Similar a HashMap, a diferencia que mantiene los elementos
ordenados. Y porque es un poco ms lento para agregar o quitar elementos de la
coleccin.
Pero
permite
una
iteracin
ms
veloz.
- TreeMap: Es un mapa ordenado de forma natural. Tambin permite definir un tipo
de orden (a travs de las interfaces Comparable y Comparator). A partir de Java 6,
2

implementa la interface NavigableMap.


Queue: Es una coleccin de tipo cola, la cual permite almacenar cosas que deben
ser procesadas de cierta manera. Generalmente funcionan como colas FIFO (First-In,
First-Out).
- PriorityQueue: Es una clase nueva de Java 5. Generalmente se utiliza la clase
LinkedList para implementar colas. Pero el propsito de esta coleccin, es crear colas
con prioridades, a diferencia de las colas FIFO. Sus elementos se encuentran
ordenados por orden natural, o de acuerdo a un objeto Comparator. El orden de los
elementos representa la prioridad.
Ordenando colecciones
Las clases Arrays y Collections poseen un mtodo para ordenar sus elementos. Arrays.sort() y
Collections.sort(). La nica condicin que deben cumplir los elementos del arreglo, es que sean del
mismo tipo. Objetos de diferentes tipos no son mutuamente comparables.
java.lang.Comparable
Para que una coleccin de objetos pueda ser ordenada, los mismos deben implementar las interface
Comparable. Dicha interface solo posee el mtodo compareTo().
thisObject.compareTo(anotherObject);
Este mtodo devuelve un valor entero con las siguientes caractersticas:
Negativo: thisObject < anotherObject
Cero: thisObject == anotherObject
Positivo: thisObject > anotherObject
La interface Comparable (a partir de Java 5) permite utilizar un tipo genrico. De esta manera
no se deben realizar casteos en ninguna parte del cdigo. Cada clase que implemente la
interface,
definir
el
tipo
de
objeto
con
el
que
trabajara.
public
int
compareTo(T
o);
java.util.Comparator
Existe una versin sobrecargada del mtodo Collections.sort(), la cual permite pasar como
argumento un objeto Comparator. La interface Comparator brinda la capacidad de ordenar
una coleccin de diferentes maneras. Para utilizar esta interface, se debe declarar una nueva
clase que la implemente, y sobrescriba el mtodo compare(). Al igual que Comparable puede
utilizar un tipo parametrizado (lo cual no es obligatorio, pero generar advertencias al
momento
de
la
compilacin).
public
int
compare(T
o1,
T
o2);
Arrays.sort()
La clase Arrays (al igual que Collections) posee dos versiones del mtodo sort():
Arrays.sort(arrayToSort): Para cualquier tipo de objeto o tipos primitivos.
Arrays.sort(arrayToSort, Comparator): se puede utilizar solo para objetos (NO primitivos).
3

Buscando
elementos
en
las
colecciones
Las clases Collections y Arrays poseen un mtodo que permite buscar un elemento especfico,
binarySearch(). Las bsquedas exitosas devuelven el valor entero del ndice del elemento, las
que no tienen xito devuelven un entero negativo que representa el lugar de insercin. Es
obligatorio que la coleccin se encuentre ordenada antes de realizar cualquier bsqueda, caso
contrario se devolver un valor impredecible. Si la coleccin ha sido ordenada mediante un
objeto Comparator, la bsqueda debe realizarse pasando como segundo parmetro el mismo
objeto
Comparator.
Los siguientes mtodos pertenecen tanto a Arrays como a Collections:

binarySearch(ObjetoBuscado
o)

binarySearch(ObjetoBuscado
o,
Comparable
c)
Convirtiendo
arreglos
a
listas
y
listas
a
arreglos
Las interfaces List y Set poseen el mtodo toArray(), el cual convierte la lista de elementos en
un arreglo. La clase Arrays tiene un mtodo llamado asList(), este copia el contenido de un
arreglo
adentro
de
una
lista.
Cuando se actualiza un elemento de algunas de las dos colecciones, automticamente se
actualiza
la
otra.
Iterator
Es un objeto que est asociado con una coleccin especfica. Permite iterar a travs de la
coleccin paso a paso. Los dos mtodos de la interface Iterator que se deben saber para el
examen son:
boolean hasNext(): Devuelve true si hay al menos un elemento ms en la coleccin
que se esta atravesando.
Object next(): Devuelve el prximo objeto en la coleccin, y mueve hacia adelante el
puntero.
Se puede utilizar un tipo parametrizado junto al objeto Iterator, de esta menara el mtodo
next()
devolver
dicho
tipo,
evitando
las
necesidades
de
casteo.
Set
Se debe prestar atencin el tipo de implementacin que se utiliza. Una coleccin HashSet
permite contener elementos de diferentes tipos (si el tipo parametrizado es Object, o el mismo
se excluye). Pero una coleccin TreeSet (la cual contiene a sus elementos en orden) no
permite
contener
objetos
que
no
sean
comparables
entre
s.
Map
A la hora de utilizar este tipo de colecciones, se debe prestar atencin a las claves utilizadas.
Es decir, si un objeto clave (insertado en la coleccin) luego modifica su estado, puede ser
que el mismo no sea hallado en el mapa. Esta situacin se da debido a que el mtodo
4

hashCode(),

devuelve

un

cdigo

diferente.

NavigableSet
Esta interface (implementada nicamente por TreeSet) posee diversos mtodos de utilidad:

lower(): Devuelve el elemento menor al elemento pasado como parmetro.


floor(): Devuelve el elemento menor o igual al elemento pasado como parmetro.
higher(): Devuelve el elemento mayor al elemento pasado como parmetro.
ceiling(): Devuelve el elemento mayor o igual al elemento pasado como parmetro.
pollFirst(): Devuelve el primer elemento y lo elimina de la coleccin.
pollLast(): Devuelve el ltimo elemento y lo elimina de la coleccin.
descendingSet(): Devuelve una copia de la coleccin en orden inverso.
headSet(e): Devuelve un subconjunto que termina en el elemento (excluido) e.
tailSet(e): Devuelve un subconjunto que comienza en el elemento (incluido) e.
subSet(s, e): Devuelve un subconjunto que comienza en el elemento (incluido) s y
finaliza en el elemento (excluido) e.

NavigableMap
Esta interface (implementada nicamente por TreeMap) posee diversos mtodos de utilidad:

lowerKey(): Devuelve la clave menor a la clave pasada como parmetro.


floorKey(): Devuelve la clave menor o igual a la clave pasada como parmetro.
higherKey(): Devuelve la clave mayor a la clave pasada como parmetro.
ceilingKey(): Devuelve la clave mayor o igual a la clave pasada como parmetro.
pollFirstEntry(): Devuelve la primer pareja clave/valor y la elimina de la coleccin.
pollLastEntry(): Devuelve la ultima pareja clave/valor y la elimina de la coleccin.
descendigMap(): Devuelve una copia de la coleccin en orden inverso.
headMap(k): Devuelve un subconjunto que termina en la clave (excluida) k.
tailMap(k): Devuelve un subconjunto que comienza en la clave (incluida) k.
subMap(s, e): Devuelve un subconjunto que comienza en la clave (incluida) s y
finaliza en la clave (excluida) e.

Queue
La coleccin PriorityQueue ordena sus elementos utilizando una prioridad definida por el
usuario. La prioridad puede ser el orden natural, pero tambin se puede ordenar utilizando un
objeto Comparator. La interface Queue posee mtodos que no se encuentran en ninguna otra
coleccin:
peek(): Devuelve el primer elemento de la cola (o el que tenga mayor prioridad).
poll(): Devuelve el primer elemento de la cola (o el que tenga mayor prioridad), y
luego lo elimina de la cola.
offer(T o): Agrega un elemento al final de la cola (o en el lugar donde indique su
prioridad).
5

RESUMEN:
TWO-MINUTE
Sobrescribiendo hashCode() y equals() (Objetivo 6.2):

DRILL

Los mtodos equals(), hashCode() y toString() son pblicos.


El mtodo toString() permite mostrar el estado de un objeto mediante un String.
El operador == sirve para determinar si dos variables de referencia apuntan al mismo
objeto.
El mtodo equals() sirve para determinar si dos objetos poseen un estado equivalente.
Si no se sobrescribe el mtodo equals(), los objetos no sern tiles como claves hash.
Si no se sobrescribe el mtodo equals(), objetos diferentes no pueden ser considerados
iguales.
La clase String y las clases envoltorios (wrappers) sobrescriben equals() y son claves
hash eficientes.
Cuando se sobrescribe el mtodo equals(), es conveniente utilizar el operador
instanceof para estar seguro de que se est evaluando un objeto correcto.
Cuando se sobrescribe el mtodo equals(), es conveniente comprar los atributos
significantes del objeto.
Los
caractersticas
ms
importantes
del
mtodo
equals()
son:
Es
reflexivo:
x.equals(x)
es
true.
- Es simtrico: Si x.equals(y) es true, entonces y.equals(x) debe ser true.
- Es transitivo: Si x.equals(y) es true, y y.equals(z) es true, entonces z.equals(x) es
true.
- Es consistente: Mltiples llamadas a x.equals(y) deben retornar el mismo resultado.
- Null: Si x no es null, entonces x.equals(null) es false.
Si x.equals(y) es true, entonces x.hashCode() == y.hashCode() es true.
Si se sobrescribe equals(), es aconsejable sobrescribir hashCode().
HashMap, Hashtable, LinkedHashMap, HashSet y LinkedHashSet utilizan el cdigo
de hash.
Un hashCode() apropiado debe cumplir el contrato del mtodo.
Un hashCode() eficiente debe retornar valores diferentes para distribuir a travs de
todas las claves.
El mtodo equals() debe ser precioso como hashCode(), es decir, se deben utilizar las
mismas variables de instancia para llevar a cabo sus operaciones.
Es legal que el mtodo hashCode() devuelva el mismo valor para todas las instancias
de una clase. Salvo que en la prctica esto no es eficiente.
Los
caractersticas
ms
importantes
del
mtodo
hashCode()
son:
- Es consistente: Mltiples llamados a x.hashCode() devuelven el mismo valor entero.
- Si x.equals(y) es true, x.hashCode() == y.hashCode() es true.
- Si x.equals(y) es false, entonces x.hashCode() == y.hashCode() puede ser tanto true
como false, pero si es false la implementacin tiende a tener mayor eficiencia.
Las variables de instancia transient son inapropiadas para utilizar en equals() y
6

hashCode().
Colecciones (Objetivo 6.1):
Las acciones comunes sobre las colecciones son aadir elementos, eliminarlos,
verificar su inclusin, obtenerlos y iterar sobre los mismos.
Existen
cuatro
tipos
bsicos
de
colecciones:
Lists
Sets
Maps
- Queues
El ordenamiento puede ser alfabtico, numrico o definido por el usuario.
Atributos clave de las clases de coleccin (Objetivo 6.1):

ArrayList: Rpida iteracin y rpido acceso aleatorio.


Vector: Es como un ArrayList ms lento, pero tiene sus mtodos sincronizados.
LinkedList: Es bueno para agregar elementos al final, por ejemplo pilas y colas.
HashSet: Rpido acceso, asegura la no duplicacin, no provee un orden.
LinkedHashSet: No posee elementos duplicados, itera por orden de insercin.
TreeSet: No posee elementos duplicados, itera en orden.
HashMap: Rpidas actualizaciones (clave/valor), permite una clave null y muchos
valores null.
Hashtable: Es como un HashMap ms lento, pero tiene sus mtodos sincronizados. No
permite valores null tanto en las claves como en los valores.
LinkedHashMap: Rpidas iteraciones, itera en orden de insercin o ultimo acceso.
Tambin permite valores null y una clave null.
TreeMap: Un mapa ordenado.
PriorityQueue: Una cola ordenada con las prioridades de sus elementos.

Utilizando las clases de coleccin (Objetivo 6.3):


Las colecciones pueden almacenar solo objetos, pero las primitivas pueden ser
convertidas automticamente a sus tipos envoltorios (autoboxed).
Las iteraciones se pueden realizar a travs del operador for (nuevo) o con un objeto
Iterator a travs de los mtodos hasNext() y next().
El mtodo hasNext() determina si existen ms elementos, el iterador no se mueve.
El mtodo next() devuelve el siguiente elemento y mueve el iterador hacia adelante.
Para trabajar de manera eficiente, los objetos clave de un mapa deben sobrescribir el
mtodo equals() y hashCode().
Las colas utilizan el mtodo offer() para aadir elementos, poll() para devolver y
eliminar el elemento inicial, y peek() para obtener el elemento inicial.
A partir de Java 6 las clases TreeSet y TreeMap tienen nuevos mtodos de navegacin
como floor() y higher().
7

Se pueden crear/extender sub-copias respaldadas de TreeSets y TreeMaps.


Ordenando y buscando en Arrays y Lists (Objetivo 6.5):
La ordenacin se puede realizar en orden natural, o a travs de un objeto Comparable
o muchos Comparators.
Para implementar Comparable se debe utilizar el mtodo compareTo(), el cual provee
solo un modo de ordenacin.
Se pueden crear muchos Comparators para ordenar una clase de diversas maneras,
implementando el mtodo compare().
Para que los elementos de una lista (List) puedan ser ordenados y buscados, los
mismos deben ser comparables.
Para buscar elementos en un arreglo o lista, los elementos deben estar ordenados.
Clases de utilidad: Collections y Arrays (Objetivo 6.5):
Estas dos clases pertenecen al paquete java.util, y las mismas proveen:
- Un mtodo sort(). El cual ordena los elementos en orden natural o a travs de un
objeto
Comparator.
- Un mtodo binarySearch(). Para buscar un elemento en un arreglo o lista
previamente
ordenado.
- El mtodo Arrays.asList crea una lista (List) a partir de un arreglo.
- El mtodo Collections.reverse() invierte el orden de los elementos de una lista.
- El mtodo Collections.reverseOrder() devuelve un Comparator que ordena
inversamente.
- Las interfaces List y Set poseen el mtodo toArray() que convierte la coleccin en un
arreglo.
Genricos (Objetivo 6.4):
Los tipos genricos permiten forzar la seguridad de los tipos, en tiempo de
compilacin, en las colecciones (o otras clases y mtodos que utilicen tipos
parametrizados).
Un ArrayList<T> permite almacenar objetos T o cualquier subtipo del mismo. (T
tambin puede ser una interface).
Cuando se utilizan colecciones genricas, no es necesario castear los objetos cuando
se obtienen de la misma.
Se puede pasar una coleccin genrica como parmetro a un mtodo que toma una
coleccin no genrica, pero los resultados pueden ser inesperados.
Compilar sin ningn error no es lo mismo que compilar sin ninguna advertencia. Una
advertencia de compilacin no es considerado un error de compilacin.
La informacin genrica de tipo no existe en tiempo de ejecucin, es solo para la
seguridad de tipos en tiempo de compilacin. Mesclando genricos con cdigo legal
se puede compilar correctamente, pero dicho cdigo puede arrojar una excepcin.

Las asignaciones polimrficas aplican solo al tipo base, no al parmetro de tipo


genrico:
List<Animal>
l
=
new
ArrayList<Animal>();
//
valido
- List<Animal> l = new ArrayList<Dog>(); // invlido
La regla de asignacin polimrfica aplica en cualquier lugar en donde se pueda
realizar
una
asignacin:
- void foo(List<Animal> l) { } // no puede tomar un argumento List<Dog>
- List<Animal> bar() { } // no puede devolver un List<Dog>
La sintaxis comodn permite a un mtodo genrico, aceptar subtipos (o supertipos) de
un tipo declarado como argumento de mtodo: List<? extends Animal>
Cuando se utiliza un comodin <? extends Dog>, la coleccin puede ser accedida pero
no modificada.
Cuando se utiliza el comodin List<?>, cualquier tipo genrico puede ser asignado a la
referencia, pero solo para acceso, no para modificaciones.
List<?> es igual a List<? extends Object>.
Las convenciones de declaracin utilizan la letra T para tipos y E para elementos de
una coleccin.
Se puede utilizar ms de un tipo parametrizado en una declaracin.
Se puede declarar un tipo genrico utilizando un tipo que no est definido en la clase:
public <T> void makeList(T t) { }

Etiquetas: contenedores, genricos, java, objetivos, scjp | comentarios (0)

Almacenamiento de objetos (Contenedores)


martes, 11 de agosto de 2009 by Matas Emiliano Alvarez Durn
Resumen del captulo 11 (Almacenamiento de objetos) del "Libro Thinking in Java (4ta
Edicin)".
Introduccin
La biblioteca java.util posee un conjunto bastante completo de clases contenedoras. Existen
cuatro tipo bsicos: List, Set, Queue y Map (lista, conjunto, cola y mapa). Los contenedores
proporcionan formas ms sofisticadas (que las matrices) de almacenar objetos.
La biblioteca de contenedores Java toma la idea de almacenamiento de los objetos y la
divide en dos conceptos distintos, expresados mediante las interfaces bsicas de la biblioteca:
Collection: una secuencia de elementos individuales a los que se aplica una o ms
reglas.
- List: almacena los elementos en la forma en la que fueron insertados.
9

Set:
no
puede
tener
elementos
duplicados.
- Queue: produce los elementos en el orden determinado por una disciplina de cola.
Map: un grupo de parejas de objetos clave-valor, que permite efectuar bsquedas de
valores utilizando una clase. Un mapa permite buscar un objeto utilizando otro objeto.
Tambin se lo denomina matriz asociativa o diccionario.
Estas interfaces utilizan tipos genricos, es decir, se debe especificar el tipo de objeto/s que
almacenar el contenedor. Esto se realiza a travs de corchetes angulares que rodean los
parmetros
de
tipo.
De ser posible, se debe intentar escribir la mayor parte del cdigo para que se comunique con
estas interfaces. El nico lugar donde se debera especificar el tipo concreto del contenedor es
en
la
creacin
del
mismo.
Ver
ejemplo:
Main01.java
Existen mtodos de utilidad en las clases Arrays y Collections de java.util que aaden grupos
de elementos a una coleccin:
Collections.addAll (Collection c, T elements): toma un objeto de tipo Collection
como primer argumento y una lista de valores separados por coma. Aade los
elementos a la coleccin.
Arrays.asList (T a): toma una lista de valores separados por coma y lo transforma
en un objeto List.
Ver

ejemplo:

Main02.java

List
Las listas garantizan que los elementos se mantengan en una secuencia concreta. La interface
List aade varios mtodos a Collection que permiten la insercin y la eliminacin de
elementos
en
mitad
de
una
lista.
Existen dos tipos de objetos List:
ArrayList: Es el que mejor permite acceder a los elementos de forma aleatoria, pero
que resulta ms lento a la hora de insertar y eliminar elementos en mitad de una lista.
LinkedList: Proporciona un acceso secuencial ptimo, siendo las inserciones y
borrados en mitad de una lista enormemente rpidos. Resulta relativamente lento para
los accesos aleatorios, pero tiene muchas ms funcionalidades que ArrayList.
Mtodos de la interface:
boolean contains(Object o): Permite averiguar si un objeto se encuentra dentro de la
lista.
boolean remove(Object o): Permite eliminar un objeto, pasando la referencia al
mismo.
int indexOf(Object o): Pasando como parmetro una referencia a un objeto, devuelve
10

el nmero de ndice en el que ese objeto est almacenado.


Estos ltimos tres mtodos utilizan el mtodo equals() para realizar sus operaciones. Es decir,
sobrescribiendo este mtodo (perteneciente a la clase Object) se puede alterar el
funcionamiento de estas operaciones.
ListsubList(int fromIndex,int toIndex): Permite crear una sublista (respaldada) a partir
de otra lista de mayor tamao. Los cambios efectuados en la lista devuelta se vern
reflejados en la lista original, y viceversa.
boolean containsAll(Collection c): Verifica si los elementos pertenecen a la lista.
boolean retainAll(Collection c): Es una operacin de interseccin de conjuntos, el
comportamiento resultante depende de la implementacin del mtodo equals().
boolean removeAll(Collection c): Elimina de la lista todos los objetos que estn en el
argumento de tipo List. Tambin opera de manera distinta dependiendo del mtodo
equals().
boolean isEmpty(): Devuelve true si la lista se encuentra vaca.
void clear(): Elimina todos los elementos de la lista.
E set(int index, E element): Se encarga de sustituir el elemento situado en el ndice
indicado (el primer argumento) con el segundo argumento.
Ver

ejemplo:

Main03.java

Set
Los objetos de tipo Set (conjuntos) no permiten almacenar ms de una instancia de cada
objeto, impide la duplicacin. Para insertar un nuevo elemento se debe verificar la no
pertenencia, por este motivo la operacin ms importante de un conjunto suele ser el de la
bsqueda. Set tiene la misma interfaz que Collection, por lo que no existe ninguna
funcionalidad
adicional.
Existen tres tipos de contenedores Set:
HashSet: Utiliza el mecanismo de hash para acelerar las bsquedas de elementos.
TreeSet: Mantiene los elementos ordenados en una estructura de datos de tipo rbol
rojo-negro. Este objeto es til para mantener los objetos ordenados.
LinkedHashSet: Es un subtipo de HashSet, por lo tanto tambin emplea una funcin
hash para acelerar las bsquedas, pero mantiene los elementos en orden de insercin
utilizando una lista enlazada.
Ver

ejemplo:

Main04.java

Queue
Una cola es normalmente un contenedor de tipo FIFO (first-in, first-out). El orden en el que
se introduzcan los elementos coincidir con el orden en que estos sern extrados. Las colas
11

son
especialmente
importantes
Existen dos tipos de contenedores Queue:

en

la

programacin

concurrente.

LinkedList: Dispone de mtodos para soportar el comportamiento de una cola e


implementa la interface Queue, por lo que un objeto LinkedList puede utilizarse como
implementacin de Queue.
PriorityQueue: Es una implementacin automtica de una cola con prioridad. Este tipo
de contenedor implica que el elemento que va a continuacin ser aquel que tenga una
necesidad mayor (la prioridad ms alta). El mecanismo de ordenacin predeterminado
utiliza el orden natural de los objetos de la cola, pero se puede modificar dicho
elemento proporcionando otro objeto Comparator.
Arroja
Inserta
Elimina
Obtiene

una
boolean

Ver

excepcin
add(E
E
E

Retorna
e)
remove()
element()

ejemplo:

un
boolean

valor
offer(E
E
E

especial
e)
poll()
peek()

Main05.java

Map
Los mapas permiten asociar objetos con otros objetos. Es decir, almacenan parejas de clavevalor. En los contenedores no se pueden almacenar primitivas, por eso la caracterstica
autoboxing convierte las primitivas en sus correspondientes objetos envoltorios. Este tipo de
contenedores puede expandirse fcilmente para que sean multidimensionales, basta con
definir
un
objeto
Map
cuyos
valores
sean
tambin
mapas.
Existen tres tipos de contenedores Map:
HashMap: Estn diseados para un acceso rpido.
TreeMap: Mantiene sus claves ordenadas y no es tan rpido como el anterior.
LinkedHashMap: Mantiene sus elementos en orden de insercin, pero proporciona un
acceso rpido con mecanismos de hash.
Mtodos de la interface:
boolean containsKey(Object key): Permite evaluar si existe una determinada clave en
el mapa.
boolean containsValue(Object value): Permite evaluar si existe un determinado valor
en el mapa.
V get(Object key): Dado un objeto clave, devuelve el valor asociado a dicha clave.
V put(K key, V value): Agrega un nuevo elemento al mapa.
void putAll(Map m): Agrega todos los elementos de un mapa a otro.
SetkeySet(): Devuelve un conjunto Set con todas las claves. (Las claves no pueden
estar repetidas).
12

Collectionvalues(): Devuelve una coleccin con todos los valores del mapa.
Ver

ejemplo:

Main06.java

Iteradores
Iterator
Es una interface que permite desplazarse a travs de una secuencia y seleccionar cada uno de
los objetos que la componen.
boolean hasNext(): Permite ver si hay ms objetos en la secuencia.
E next(): Obtiene el siguiente objeto de la secuencia.
void remove(): Elimina el ltimo elemento devuelto por el iterador.
ListIterator
Es un subtipo ms potente de Iterator que solo se genera mediante las clases List. ListIterator
es bidireccional, puede generar los ndices de los elementos siguiente y anterior, en relacin
al lugar de la lista hacia el que el iterador est apuntando y tambin posee otras
funcionalidades. Los mtodos que adiciona esta interface son:
boolean hasPrevious(): Realiza la misma accin que hasNext() pero en sentido
contrario.
E previous(): Idem next() pero en sentido contrario.
int nextIndex(): Obtiene el nmero de ndice del elemento siguiente.
int previousIndex(): Obtiene el nmero de ndice del elemento anterior.
void set(E e): Permite sustituir el elemento al que apunta por el iterador.
void add(E e): Inserta un elemento en la lista.
NOTA: NO HAY NECESIDAD DE UTILIZAR LAS CLASES ANTIGUAS Vector,
Hashtable y Stack.

13

Anda mungkin juga menyukai