19.5.1
ArrayList
e
Iterator
En la fi gura 19.3 se utiliza un objeto
ArrayList
para demostrar varias herramientas de la interfaz
Collection
.
El programa coloca dos arreglos
Color
en objetos
ArrayList
y utiliza un objeto
Iterator
para eliminar los
elementos en la segunda colección
ArrayList
de la primera colección
ArrayList
.
En las líneas 10 a 13 se declaran e inicializan dos variables arreglo
String
, las cuales se declaran como
final
,
por lo que siempre hacen referencia a estos arreglos. Recuerde que es una buena práctica de programación declarar
constantes con las palabras clave
static
y
final
. En las líneas 18 y 19 se crean objetos
ArrayList
y se asignan sus
referencias a las variables
lista
y
eliminarLista
, respectivamente. Estas dos listas almacenan objetos
String
.
Observe que
ArrayList
es una clase genérica a partir de Java SE 5, por lo que podemos especifi car un argumento
de tipo (
String
en este caso) para indicar el tipo de los elementos en cada lista. Tanto
lista
como
eliminar-
Lista
son colecciones de objetos
String
. En las líneas 22 y 23 se llena
lista
con objetos
String
almacenados
en el arreglo
colores
, y en las líneas 26 y 27 se llena
eliminarLista
con objetos
String
almacenados en el
arreglo
eliminarColores
, usando el método
add
de
List
. En las líneas 32 y 33 se imprime en pantalla cada ele-
mento de
lista
. En la línea 32 se llama al método
size
de
List
para obtener el número de elementos del objeto
ArrayList
. En la línea 33 se utiliza el método
get
de
List
para obtener valores de elementos individuales. En
las líneas 32 y 33 se pudo haber usado la instrucción
for
mejorada. En la línea 36 se hace una llamada al método
eliminarColores
(líneas 46 a 57), y recibe a
lista
y
eliminarLista
como argumentos. El método
elimi-
narColores
elimina los objetos
String
especifi cados en
eliminarLista
de la colección
lista
. En las líneas 41
y 42 se imprimen en pantalla los elementos de
lista
, una vez que
eliminarColores
elimina los objetos
String
especifi cados en
eliminarLista
de la
lista
.
El método
eliminarColores
declara dos parámetros de tipo
Collection
(línea 47), los cuales contienen
cadenas que se van a pasar como argumentos a este método. El método accede a los elementos del primer obje-
to
Collection
(
coleccion1
) mediante un objeto
Iterator
. En la línea 50 se llama al método
iterator
de
Collection
, el cual obtiene un objeto
Iterator
para el objeto
Collection
. Observe que las interfaces
Collec-
tion
e
Iterator
son tipos genéricos. En la condición del ciclo de continuación (línea 53) se hace una llamada
al método
hasNext
de
Iterator
para determinar si el objeto
Collection
contiene más elementos. El método
hasNext
devuelve
true
si otro elemento existe, y devuelve
false
en caso contrario.
La condición del
if
en la línea 55 llama al método
next
de
Iterator
para obtener una referencia al siguiente
elemento, y después utiliza el método
contains
del segundo objeto
Collection
(
coleccion2
) para determinar
si
coleccion2
contiene el elemento devuelto por
next
. De ser así, en la línea 56 se hace una llamada al método
remove
de
Iterator
para eliminar el elemento del objeto
coleccion1
de
Collection
.
Error común de programación 19.2
Si se modifi ca una colección mediante uno de sus métodos, después de crear un iterador para esa colección, el iterador
se vuelve inválido de manera inmediata; cualquier operación realizada con el iterador después de este punto lanza
excepciones
ConcurrentModificationException
. Por esta razón, se dice que los iteradores son de “falla rápida”.
1
// Fig. 19.3: PruebaCollection.java
2
// Uso de la interfaz Collection.
3
import
java.util.List;
4
import
java.util.ArrayList;
5
import
java.util.Collection;
6
import
java.util.Iterator;
7
8
public class
PruebaCollection
9
{
10
private static final
String[] colores =
11
{
"MAGENTA"
,
"ROJO"
,
"BLANCO"
,
"AZUL"
,
"CYAN"
};
12
private static final
String[] eliminarColores =
13
{
"ROJO"
,
"BLANCO"
,
"AZUL"
};
14
15
// crea objeto ArrayList, le agrega los colores y lo manipula
16
public
PruebaCollection()
Figura 19.3
| Demostración de la interfaz
Collection
mediante un objeto
ArrayList
. (Parte 1 de 2).
19.5 Listas
799
19_MAQ_CAP_19_DEITEL.indd799
4/19/081:31:20AM