822
Capítulo 19 Colecciones
En la línea 10 del constructor se crea un objeto
Stack
vacío de tipo
Number
. La clase
Number
(en el paquete
java.lang
) es la superclase de la mayoría de las clases de envoltura (como
Integer
,
Double
) para los tipos pri-
mitivos. Al crear un objeto
Stack
de objetos
Number
, se pueden meter en la pila objetos de cualquier clase que
extienda a la clase
Number
. En cada una de las líneas 19, 21, 23 y 25 se hace una llamada al método
push
de
Stack
para agregar objetos a la parte superior de la pila. Observe las literales
12L
(línea 13) y
1.0F
(línea 15). Cualquier
literal entera que tenga el
sufi jo
L
es un valor
long
. Cualquier literal entera sin un sufi jo es un valor
int
. De
manera similar, cualquier literal de punto fl otante que tenga el
sufi jo
F
es un valor
float
. Una literal de punto
fl otante sin un sufi jo es un valor
double
. Puede aprender más acerca de las literales numéricas en la
Especifi ca-
ción del lenguaje Java, en el sitio Web
java.sun.com/docs/books/jls/second_edition/html/expressions.
doc.html#224125
.
Un ciclo infi nito (líneas 34 a 39) llama al método
pop
de
Stack
para eliminar el elemento superior de la pila.
El método devuelve una referencia
Number
al elemento eliminado. Si no hay elementos en el objeto
Stack
, el
método
pop
lanza una excepción
EmptyStackException
, la cual termina el ciclo. La clase
Stack
también declara
el método
peek
. Este método devuelve el elemento superior de la pila sin sacarlo.
En la línea 49 se hace una llamada al método
isEmpty
de
Stack
(heredado por
Stack
de la clase
Vector
)
para determinar si la pila está vacía. Si está vacía, el método devuelve
true
; en caso contrario, devuelve
false
.
El método
imprimirPila
(líneas 47 a 61) utiliza la instrucción
for
mejorada para iterar a través de los
elementos en la pila. La parte superior actual de la pila (el último valor que se metió a la pila) es el primer valor
que se imprime. Como la clase
Stack
extiende a la clase
Vector
, toda la interfaz
public
de la clase
Vector
está
disponible para los clientes de la clase
Stack
.
Tip para prevenir errores 19.1
Como
Stack
extiende a
Vector
, todos los métodos
public
de
Vector
pueden llamarse en objetos
Stack
, aún si los
métodos no representan operaciones de pila convencionales. Por ejemplo, el método
add
de
Vector
se puede utilizar
para insertar un elemento en cualquier parte de una pila; una operación que podría “corromper” los datos de la pila.
Al manipular un objeto
Stack
, sólo deben usarse los métodos
push
y
pop
para agregar y eliminar elementos de la
pila, respectivamente.
19.8 La clase
PriorityQueue
y la interfaz
Queue
En la sección 17.8 presentamos la estructura de datos tipo cola y creamos nuestra propia implementación de
ella. En esta sección investigaremos la interfaz
Queue
y la clase
PriorityQueue
del paquete de utilerías de Java
(
java.util
).
Queue
, una nueva interfaz de colecciones introducida en Java SE 5, extiende a la interfaz
Collec-
tion
y proporciona operaciones adicionales para insertar, eliminar e inspeccionar elementos en una cola.
PriorityQueue
, una de las clases que implementa a la interfaz
Queue
, ordena los elementos en base a su orden
natural, según lo especifi cado por el método
compareTo
de los elementos
Comparable
, o mediante un objeto
Comparator
que se suministra a través del constructor.
La clase
PriorityQueue
proporciona una funcionalidad que permite inserciones en orden en la estructura
de datos subyacente, y eliminaciones de la parte frontal de la estructura de datos subyacente. Al agregar elementos
a un objeto
PriorityQueue
, los elementos se insertan en orden de prioridad, de tal forma que el elemento con
mayor prioridad (es decir, el valor más grande) será el primer elemento eliminado del objeto
PriorityQueue
.
Las operaciones comunes de
PriorityQueue
son:
offer
para insertar un elemento en la ubicación apropia-
da, con base en el orden de prioridad,
poll
para eliminar el elemento de mayor prioridad de la cola de prioridad
(es decir, la parte inicial o cabeza de la cola),
peek
para obtener una referencia al elemento de mayor prio-
ridad de la cola de prioridad (sin eliminar ese elemento),
clear
para eliminar todos los elementos en la cola de
prioridad y
size
para obtener el número de elementos en la cola de prioridad. En la fi gura 19.17 se demuestra
la clase
PriorityQueue
.
En la línea 10 se crea un objeto
PriorityQueue
que almacena objetos
Double
con una capacidad inicial de
11
elementos, y se ordenan los elementos de acuerdo con el ordenamiento natural del objeto (los valores prede-
terminados para un objeto
PriorityQueue
). Observe que
PriorityQueue
es una clase genérica, y que en la línea
10 se crea una instancia de un objeto
PriorityQueue
con un argumento de tipo
Double
. La clase
Priority-
Queue
proporciona cinco constructores adicionales. Uno de éstos recibe un
int
y un objeto
Comparator
para
crear un objeto
PriorityQueue
con la capacidad inicial especifi cada por el valor
int
y el ordenamiento por el
objeto
Comparator
. En las líneas 13 a 15 se utiliza el método
offer
para agregar elementos a la cola de prioridad.
19_MAQ_CAP_19_DEITEL.indd822
4/19/081:31:31AM