Vector y Stack

Tanto Vector como Stack son colecciones históricas para guardar objetos de cualquier tipo. Se puede colocar cualquier número de objetos ya que se redimensionan automáticamente. 

Vector

El comportamiento de un vector se asemeja al de un arreglo, con la bondad de que no es necesario controlar su tamaño; automáticamente, si fuera necesario, aumenta su capacidad. A partir de Java 2 la clase Vector implementa la interfaz List para que forme parte de las colecciones de Java. Tambíen, la plataforma Java 5 permite establecer el tipo concreto de elemento que puede guardar una colección, y en particular un vector, para así realizar comprobaciones de tipo durante el proceso de compilación. Por ejemplo, un vector de cadenas (String).

      Vector<String> vc = new Vector<String>();
      vc.addElement(«Lontananza»);
      vc.addElement(new Integer(12));                               // error de compilación

Sin embargo, si la declaración es la siguiente:

      Vector vc = new Vector();

Se puede añadir cualquier tipo de elemento, no hay comprobación de tipo:

       vc.addElement(«Lontananza»);
       vc.addElement(new Integer(12));                              // correcto

Stack

La clase Stack hereda el comportamiento de un vector y además define las operaciones del tipo abstracto Pila (último en entrar primero en salir). Todas las operaciones se realizan por un único punto, el final (cabeza o top) de la pila. La declaración de Stack es la siguiente:

       public class Stack extends Vector{
                  . . .
       }

Los métodos definidos por la clase:

       public Stack();                                               // Constructor, crea una pila vacía
       public Object push(Object n);             // Añade el elemento n, devuelve n
       public Object pop();                                  // Devuelve elemento cabeza y lo quita de la pila
       public Object peek();                                // Devuelve elemento cabeza sin quitarlo de la pila
       public boolean empty();                          // Devuelve true si la pila está vacía

Los elementos que almacena una colección stack son de tipo genérico (tipo Object), esto hace necesario realizar conversión de tipo cuando se extraen. La plataforma Java 5 permite parametrizar el tipo de los elementos que guarda el stack, de tal forma que el compilador verifica el tipo.

Ejemplo

Mediante una pila se analiza si una palabra o frase es palíndromo. Se lee la palabra del teclado y a la vez cada carácter se guarda en una pila. Los elementos de la pila han de ser de tipo Character, por consiguiente su declaración es: Stack<Character> pila.

       import java.util.*;

       public class Palindrome {
                  public static void main(String[] args) {
                             Scanner entrada = new Scanner(System.in);
                             Stack<Character> pila;
                             String palabra;
                             boolean palindrome;
                             pila = new Stack<Character>();
                             try{
                                          System.out.print(«Ingresar palabra o frase: «);
                                          while((palabra = entrada.nextLine()) != null){
                                                    for(int i=0;i<palabra.length();i++)
                                                           pila.push(new Character(palabra.charAt(i)));
                                                    palindrome=true;
                                                    int i=0;
                                                    while(palindrome && !pila.empty()){
                                                              Character q;
                                                              q = pila.pop();
                                                              palindrome = q.charValue() == palabra.charAt(i++);
                                                    }
                                                    if(palindrome && pila.empty())
                                                              System.out.println(palabra + » es un palindrome»);
                                                    else
                                                              System.out.println(palabra + » no es un palindrome»);
                                          }
                             }catch(Exception e){};
                  }
       }