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