Download Programa para imprimir los datos de un Vector usando la interface

Document related concepts
no text concepts found
Transcript
Programación OO
Anexo2:
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
Vector y Enumeration
La clase Vector
class java.util.Vector extends AbstractList
Collection, Serializable
implements List, Cloneable,
La clase Vector describe un Array con largo variable. Objetos de la clase Vector son
representados en una lista lineal. La lista puede contener elementos de diverso Typs, su largo
es variable (Array con variable Largo). Vector permite insertar elementos en cualquier lugar.
JDK realizó Vector como Array de elementos de tipo Object.
Crear Nuevo Vector (Constructor):
public Vector()
public Vector(int initialCapacity, int capacityIncrement)
// Un vector se agranda en forma automática, en el caso que sean incorporados más elementos
a lo planificado,(Resizing). Por eso que initialCapacity y capacityIncrement, deben ser bien
escogidos.
Insertar elementos: public void addElement(Object obj)
// añadir al final de la lista de Elementos.
Propiedades:
public boolean isEmpty()
// probar, si el vector esta vacío.
public int size()
// se asegura con el nº de elementos.
public int capacity()
// probar el largo del arrays. Ud. Puede asegurarse con Capacity() para cambiarla.
Añadir en cualquier lugar, al interior de la lista.:
public void insertElementAt(Object obj, int index) throws
ArrayIndexOutOfBoundsException
// añade un obj en la posición index del "Vector".
Buscar un Elemento: Para la busqueda secuencial esta Iterator a disposición. Pero existen
además.:
public Object firstElement() throws NoSuchElementException;
public Object lastElement() throws NoSuchElementException;
public Object elementAt(int index) throws ArrayIndexOutOfBoundException;
firstElement() entrega el primero, lastElement() el último Elemento- Con elementAt() se
busca el Elemento de la posición index.
________________________________________________________________________
Area de Computación, Universidad de La Serena
1
Programación OO
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
Vector
<< Constructoren >>
public Vector()
// Un Vector será declarado.
public Vector(int startCapacity)
// Un Vector contiene espacio para startCapacity Elementos
public Vector(int startKapazitaet, int kapazitaetsSchrittweite)
<< Metodos >>
public Object elementAt(int index)
// el objeto que se encuentra en index será devuelto.
public int size()
public Object firstElement()
public Object lastElement();
public void insertElementAt(Object obj, int index)
public void setElementAt(Object obj, int index)
public copyInto(Object miArray[])
// Copia el Elemento del Vector en el Array miArray
// en el caso que no lo permita, se genera una IndexOutOfBoundsException
public boolean contains(Object obj)
// busca los Elementos, entrega true si viene obj en Vector.
public int indexOf(Object obj)
public int lastIndexOf(Object obj)
public boolean removeElement(Object obj)
// elimina obj de la lista.
public void removeElementAt(int index)
// elimina el Elemento del lugar index
public void removeAllElements()
// elimina todos los Elementos
public int capacity()
// entrega cuantos elementos posee Vektor
public Object clone()
public String toString()
La clase Stack
class java.util.Stack extends Vector
Un Stack es una estructura que trabaja bajo el principio LIFO. Elementos son incorporados
por delante y por allí son también eliminados. En Java, Stack es una derivación de Vector con
nuevas propiedades.
________________________________________________________________________
Area de Computación, Universidad de La Serena
2
Programación OO
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
Constructor: public Stack();
Añadir nuevo Elemento: public Object push(Object item);
Buscar el elemento de más arriba:
public Object pop();
// busca y elimina el elemento de más arriba.
public Object peek()
// busca el elemento de más arriba.
Buscar en Stack: public int search(Object o)
// Buscar elemento arbitrario,
// entrega: Distancia entre el elemnto buscado y el elemento de más arriba.
// y –1, en el caso que el elemento no exista.
Test:public boolean empty()
// se asegura si Stack está vacío.
Vector
Stack
public Stack()
public Object push(Object obj)
public Object pop()
public Object peek()
public int search(Object obj)
public boolean empty()
Un Stack es un Vector. Esto significa que funciones, tales como, add(), addAll(),
addElement(),
capacity(),
elementAt(), .... .siguen estando
clear(),
clone(),
contains(),
copyInto(),
a disposición.
Hasta el momento ya aprendió a construir una lista dinámica de datos mediante una lista
enlazada. También podrá utilizar la clase Vector de Java para almacenar los datos. El objeto
Vector proporciona la capacidad a la estructura array de redimensionarla dinamicamente, es
decir, es un arreglo ajustable que puede aumentar o disminuir su tamaño dependiendo del
número de elementos que tenga que guardar, a diferencia de C++, la que debe llamar a la
función realloc para aumentar la capacidad de almacenamiento de un arreglo, mientras que un
vector aumenta su tamaño en forma automática conforme lo necesita. La clase Vector
proporciona métodos que permiten insertar, eliminar y buscar elementos.
Vector miVector = new Vector(15);
// miVector es una referencia a
un objeto Vector con una capacidad inicial de 15 elementos.
Vector miVector = new Vector(15, 5);
// miVector es una referencia
a un objeto Vector con una capacidad inicial de 15 elementos, y un
incremento de tamaño de 5.
________________________________________________________________________
Area de Computación, Universidad de La Serena
3
Programación OO
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
Un objeto Vector tiene una capacidad y tamaño. Para determinar la actual capacidad de un
Vector use el método capacity(). Para encontrar el tamaño actual de Vector use el método
size().
 La capacity es el numero de slots disponibles.
 El size es el número de slots que tienen los datos en el.
 Slots 0 hasta size-1 tienen datos.
Los elementos de un Vector son accesados usando un indice integer. Como con arrays, el
indice es un valor integer que parte de 0.
El siguiente fragmento crea un vector y le agrega varios elementos String con el método
addElement.
Vector lista = new Vector();
lista.addElemet(new String(“Java”));
lista.addElemet(new String(“C”));
lista.addElemet(new String(“C++”));
En algunas ocasiones deberá saber cuantos elementos contiene el vector. En estos casos podrá
usar el método size de la clase Vector. Por ejemplo, usando el fragmento anterior, basta
con incorporar la línea
System.out.println(“número de elementos en la lista = “ + lista.size());
Cuyo resultado debería ser 3.
El ciclo usa el método size() para asegurarse que todo elemento sea accesado. Un Vector
tiene datos en los slots 0 a size()-1. Este programa nos dice el como imprimir los datos de un
Vector, aunque luego se verá que Enumeration facilita la tarea.
EJEMPLOS:
Que imprime el programa siguiente?. Analizarlo.
import java.util.* ;
class VectorEg0
{
public static void main ( String[] args)
{
Vector nombres = new Vector( 10 );
nombres.addElement(
nombres.addElement(
nombres.addElement(
nombres.addElement(
nombres.addElement(
nombres.addElement(
"Ana" );
"Boris” );
"Cristian" );
"Daniel" );
"Elena" );
"Federico" );
________________________________________________________________________
Area de Computación, Universidad de La Serena
4
Programación OO
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
for ( int j=0; j < nombres.size(); j++ )
System.out.println( j + ": " + nombres.elementAt(j) );
}
}
Que imprime el programa siguiente?. Analizarlo.
import java.util.* ;
class VectorEg1
{
public static void main ( String[] args)
{
Vector nom = new Vector( 10 );
nom.addElement( "Ana" );
nom.addElement( "Boris” );
nom.addElement( "Cristian" );
nom.setElementAt( "Sara", 0 );
nom.setElementAt( "Bartolome", 1 );
for ( int j=0; j < nom.size(); j++ )
System.out.println( j + ": " + nom.elementAt(j) );
}
}
Que imprime el programa siguiente?. Analizarlo.
import java.util.* ;
class VectorEg2
{
public static void main ( String[] args)
{
Vector nom = new Vector( 10 );
________________________________________________________________________
Area de Computación, Universidad de La Serena
5
Programación OO
nom.addElement(
nom.addElement(
nom.addElement(
nom.addElement(
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
"Ana" );
"Boris” );
"Cristian" );
"Debora" );
nom.removeElementAt(2);
for ( int j=0; j < nom.size(); j++ )
System.out.println( j + ": " +
nom.elementAt(j) );
}
}
Que imprime este programa? . Analizarlo.
import java.util.* ;
class VectorEg3
{
public static void main ( String[] args)
{
Vector nom = new Vector( 10 );
nom.addElement(
nom.addElement(
nom.addElement(
nom.addElement(
"Ana" );
"Boris" );
"Cristian" );
"Debora" );
nom.insertElementAt( "Elena", 2);
for ( int j=0; j < nom.size(); j++ )
System.out.println( j + ": " + nom.elementAt(j) );
}
}
________________________________________________________________________
Area de Computación, Universidad de La Serena
6
Programación OO
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
Construya un programa que imprime el primero y el último de un Vector con 4 elementos.
Una posible respuesta es:
import java.util.* ;
class VectorEg4
{
public static void main ( String[] args)
{
Vector nom = new Vector( 10 );
nom.addElement(
nom.addElement(
nom.addElement(
nom.addElement(
"Ana" );
"Boris" );
"Cristian" );
"Debora" );
System.out.println( nom.firstElement() );
System.out.println( nom.lastElement() );
}
}
También es posible determinar el índice de algún elemento, sino esta entrega –1.
import java.util.* ;
class VectorEg5
{
public static void main ( String[] args)
{
Vector nom = new Vector( 10 );
nom.addElement(
nom.addElement(
nom.addElement(
nom.addElement(
nom.addElement(
nom.addElement(
"Ana" );
"Boris" );
"Cristian" );
"Debora" );
"Chris" );
"Jose" );
System.out.println( nom.indexOf( "Boris" ) ); //1
System.out.println( nom.indexOf( "Elena" ) );//-1
}
}
________________________________________________________________________
Area de Computación, Universidad de La Serena
7
Programación OO
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
Aunque un objeto Vector es un arreglo de elementos, no es posible acceder a un elemento de
un vector con la sintaxis de corchetes como en arreglos comunes. Para obtener un elemento de
un objeto Vector, puede llamar al método elementAt, cuyo formato es
Object elementAt(int indice);
siendo factible de obtener el primero y último, invocando al método firstElement y
lastElement, respectivamente.
Este es un ejemplo de una clase para almacenar datos de alumnos.
Aplicación 1
import java.util.*;
// clase para almacenar los datos de alumnos.
class Alumno {
String nombre;
String telefono;
int num_alumnos;
Alumno(String nuevo_nombre, String nuevo_telefono, int nuevo_num)
{
nombre = new String(nuevo_nombre);
telefono = new String(nuevo_telefono);
num_alumnos = nuevo_num;
}
public String toString()
{
return("Nombre: " + nombre +
"\nTelefono: " + telefono +
"\nNum Alumno: " + num_alumnos);
}
}
public class vector_alumnos {
public static void main(String args[])
{
Vector lista_alum = new Vector();
lista_alum.addElement(new Alumno("Juan Pérez",
"555-1234",101));
lista_alum.addElement(new Alumno("María González",
"555-4832",102));
lista_alum.addElement(new Alumno("Pedro Martínez",
"555-2730",130));
for(int i = 0; i < lista_alum.size(); i++)
{
Alumno actual =(Alumno) lista_alum.elementAt(i);
System.out.println("Alumno " + i + ":");
System.out.println(actual);
________________________________________________________________________
Area de Computación, Universidad de La Serena
8
Programación OO
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
}
}
}
Sin embargo, la gracia mayor que tiene la clase Vector es el de poder almacenar objetos de
diferentes tipos en el mismo vector. Esto se debe a que los objetos Vector utilizan una
referencia a Object para apuntar a sus elementos. Por ello puede utilizar un objeto Vector para
almacenar cualquier tipo de objeto.
Aplicación 2
import java.util.*;
public class vector_mixto {
public static void main(String args[])
{
Vector lista_mixta = new Vector();
// agregar 3 enteros al vector
lista_mixta.addElement(new Integer(4));
lista_mixta.addElement(new Integer(2));
lista_mixta.addElement(new Integer(0));
// agregar 3 Strings al vector
lista_mixta.addElement(new String("Pedro"));
lista_mixta.addElement(new String("Juan"));
lista_mixta.addElement(new String("Pablo"));
// agregar 3 números de punto flotante al vector
lista_mixta.addElement(new Float(1.1));
lista_mixta.addElement(new Float(2.2));
lista_mixta.addElement(new Float(4.4));
// extraer los enteros
System.out.print("Los 3 enteros son :");
for (int i = 0; i < 3; i++)
{
Integer valor_int =(Integer) lista_mixta.elementAt(i);
System.out.print(" " + valor_int);
}
System.out.println();
________________________________________________________________________
Area de Computación, Universidad de La Serena
9
Programación OO
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
// extraer los Strings
System.out.print("Los 3 Strings son :");
for (int i = 3; i < 6; i++)
{
String valor_str =(String) lista_mixta.elementAt(i);
System.out.print(" " + valor_str);
}
System.out.println();
// extraer los floats
System.out.print("Los 3 floats son :");
for (int i = 6; i < 9; i++)
{
Float valor_float =(Float) lista_mixta.elementAt(i);
System.out.print(" " + valor_float);
}
System.out.println();
}
}
Otra aplicación es la siguiente
Vector son especialmente convenientes de usar para cuando Ud. desea mantener una lista
de sus propios tipos de objetos, incluso aquellas de su propia invención descienden de la
clase Object , por eso repetimos que Vector puede ser usado con objetos de cualquier
tipo. Por ejemplo, si queremos mantener una guía de teléfono, cada entrada deberá contener
un nombre y numero. Este segmento de programa debería ser el más apropiado.
class Entrada
{
String nombre;
String numero;
// constructor
Entrada( String nom, String num )
{
nombre = nom; numero = num;
}
// varios otros metodos
. . .
}
Un ejemplo concreto.
import java.util.* ;
import java.io.*;
________________________________________________________________________ 10
Area de Computación, Universidad de La Serena
Programación OO
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
class Entrada
{
String nombre;
String numero;
// constructor
Entrada( String n, String num )
{
nombre = n; numero = num;
}
// metodos
public boolean equals( Object otro )
{
return nombre.equals( ((Entrada)otro).nombre );
}
public String toString()
{
return "Nombre: " + nombre + " Numero: " + numero;
}
}
class GuiaFonoTest
{
public static void main ( String[] args) throws IOException
{
Vector fono = new Vector( 10 );
fono.addElement(
fono.addElement(
fono.addElement(
fono.addElement(
fono.addElement(
new
new
new
new
new
Entrada(
Entrada(
Entrada(
Entrada(
Entrada(
"Ana", "123-4567") );
"Boris”, "123-6780") );
"Alberto", "789-1234") );
"Debora", "789-4457") );
"Jose", "446-0210") );
// Mirada para Jose en fono usando el método equals()
int resul = fono.indexOf( new Entrada( "Jose", "") ) ;
System.out.println( "indexOf returns: " + resul ) ;
}
}
La salida es:
Una aplicación más realista para la guía telefónica es el siguiente programa.
import java.util.* ;
import java.io.*;
________________________________________________________________________ 11
Area de Computación, Universidad de La Serena
Programación OO
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
class Entrada
{
String nombre;
String numero;
// constructor
Entrada( String n, String num )
{
nombre = n; numero = num;
}
// metodos
public boolean equals( Object otro )
{
return nombre.equals( ((Entrada)otro).nombre );
}
public String toString()
{
return "Nombre: " + nombre + " Numero: " + numero;
}
}
class GuiaFonoApp
{
public static void main ( String[] args) throws IOException
{
Vector fono = new Vector( 10 );
fono.addElement(
fono.addElement(
fono.addElement(
fono.addElement(
fono.addElement(
new
new
new
new
new
Entrada(
Entrada(
Entrada(
Entrada(
Entrada(
"Ana", "123-4567") );
"Boris", "123-6780") );
"Alberto", "789-1234") );
"Debora", "789-4457") );
"Zara", "446-0210") );
String nombre;
BufferedReader stdin = new BufferedReader(
new InputStreamReader( System.in ) );
System.out.print("Ingrese el nombre -->");
nombre = stdin.readLine().trim();
while( !nombre.equals("quit" ) )
{
int resul = fono.indexOf( new Entrada( nombre, "") ) ;
if ( resul >= 0 )
System.out.println( fono.elementAt( resul ) ) ;
else
System.out.println( nombre + " no fue encontrado" ) ;
System.out.print("Ingrese el nombre -->") ;
nombre = stdin.readLine().trim() ;
}
}
}
________________________________________________________________________ 12
Area de Computación, Universidad de La Serena
Programación OO
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
Enumeration
Enumeration es una interfaz que le permite recorrer los elementos uno a uno. La aplicación
siguiente permite recorrer todos los elementos de una Hashtable desplegándolos uno a la vez.
elements() // Returns una enumeracion de los componentes de un vector.
Si tiene un objeto enumeration, los métodos hasMoreElements()
nextElement() son usados para desplazarse a través de los elementos:
boolean hasMoreElements()// return true si no todos los elementos han sido
visitados.
Object nextElement() // Returns el siguiente elemento de la enumeration.
y
Programa para imprimir los datos de un Vector usando la interface Enumeration
import java.util.* ;
class VectorEg6
{
public static void main ( String[] args)
{
Vector nom = new Vector( 10 );
nom.addElement(
nom.addElement(
nom.addElement(
nom.addElement(
nom.addElement(
nom.addElement(
nom.addElement(
nom.addElement(
"Ana" );
"Boris" );
"Christian" );
"Debora" );
"Elena" );
"Frank" );
"Gabriel" );
"Alberto" );
Enumeration enum = nom.elements();
while ( enum.hasMoreElements() )
System.out.println(enum.nextElement());
}
}
________________________________________________________________________ 13
Area de Computación, Universidad de La Serena
Programación OO
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
import java.util.*;
// clase para almacenar los datos de los alumnos
class RegAlumno {
String nombre;
String telefono;
float promedio;
RegAlumno(String nuevo_nombre, String nuevo_telefono,
float nuevo_promedio)
{
nombre = new String(nuevo_nombre);
telefono = new String(nuevo_telefono);
promedio = nuevo_promedio;
}
public String toString()
{
return("Nombre: " + nombre +
"\nTelefono No: " + telefono +
"\nPromedio: " + promedio);
}
}
public class hashing_alumnos {
public static void main(String args[])
{
Hashtable lista_alumnos = new Hashtable();
lista_alumnos.put("575-17-2351",
new RegAlumno("Juan Pérez", "555-2310", 4.0f));
lista_alumnos.put("243-67-0201",
new RegAlumno("Pedro López", "555-6104", 3.1f));
lista_alumnos.put("923-55-9124",
new RegAlumno("José Martínez","555-3434", 2.7f));
lista_alumnos.put("123-95-7934",
new RegAlumno("María Sánchez","555-0017", 3.9f));
/* extraer un alumno
RegAlumno alumno =
________________________________________________________________________ 14
Area de Computación, Universidad de La Serena
Programación OO
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
(RegAlumno) lista_alumnos.get("243-67-0201");
System.out.println("Alumno número 243-67-0201:");
System.out.println(alumno);
*/
// extraer todos los registros de alumnos
Enumeration enum = lista_alumnos.elements();
while(enum.hasMoreElements())
{
RegAlumno alumno =(RegAlumno) enum.nextElement();
System.out.println(alumno);
}
}
}
Actividad
Con todos los elementos vertidos. Construir un Frame que muestre los distintos métodos
visto hasta aquí, en lo que se refiere a Vector.
Los métodos a considerar deberían ser: add(), remove(), first(), last(), IsEmpty(), trim().
Así debería verse, mas o menos, la interfaz gráfica.
________________________________________________________________________ 15
Area de Computación, Universidad de La Serena
Programación OO
Anexo2: Vector y Enumeración
Dr. Eric Jeltsch F.
Esto se obtiene para cuando presiono Desplegar.
________________________________________________________________________ 16
Area de Computación, Universidad de La Serena