Practica Lab 3

download Practica Lab 3

of 11

description

laboratorio

Transcript of Practica Lab 3

LABORATORIO N 1

Ingeniera de Sistemas UNSCHEstructura de datos IS241

LABORATORIO 03APELLIDOS Y NOMBRES.CDIGO NOTA ..ABSTRAC SET . HASHSET. TREESETLA INTERFAZ SETLa interface SET es la encargada del tratamiento de conjuntos en el api de Java. Un conjunto en Java es una coleccin de elementos que, como el conjunto en matemticas, no permite elementos duplicados dentro de ella y no tiene orden entre sus elementos. Ms formalmente, no permite elementos e1, e2 tales que: e1.equals(e2) sea true.

Es una coleccin que no permite elementos repetidos. La interfazSetcontiene slo mtodos heredados deCollectiony aumenta la restriccin de elementos duplicados. Esta interfaz tiene un contrato con un comportamiento ms especfico en operaciones conequalsyhashCode, permitindo a instancias de esta interfaz ser comparadas significativamente an si el tipo de implementacin difiere. Dos instancias de Set son iguales si ellas contienen los mismos elementos.

Java dispone de 3 implementaciones generales deSet: HashSet, TreeSet y LinkedHashSet. HASHSET

HashSet es la clase que vamos a utilizar para implementar la interfaz SET ya que es quizs la ms usada para implementar esta interface. Esta clase implementa la interface SET basada en una tabla hash (a modo resumen para nosotros una tabla hash ser una tabla que se construye en base a claves que permiten localizar objetos. Por ejemplo un DNI podra ser la clave para localizar a una persona. En esta clase la clave da la posicin del objeto en la tabla, permitiendo un acceso directo al elemento. Este acceso directo hace que esta clase sea ideal para bsqueda, insercin y borrado de elementos en base a una clave o llave. No hay garanta de orden (por ejemplo si hacemos un recorrido de los objetos dentro de un HashSet no siempre los obtendremos en igual orden) y se permite el uso de elementos nulos.

TREESET

TreeSet es la clase que vamos a utilizar como implementacin de la interface SORTEDSET. Esta implementacin est basada en el uso de una estructura de rbol permitiendo que los elementos estn ordenados bien por orden natural o bien por orden total definido por un Comparator y por tanto haciendo muy rpido las bsquedas, inserciones y borrados de sus elementos. A efectos prcticos, la diferencia principal de esta clase con HashSet es que sus elementos estn ordenados. Otra diferencia es la estructura de datos que sirve para almacenar datos, en un caso una tabla y en otro un rbol.

TreeSet, guardar sus elementos en un rbol, ordenando sus elementos en base a sus valores, y por lo tanto es ms lento que unHashSet. LINKHASHSETPor otro lado es implementada por una tabla Hash con una lista enlazada a travs de ella, ordenando sus elementos en base a como han sido insertados.LinkedHashSettiene un costo ms alto de rendimiento que unHashSet.

Operaciones Bsicas:

La operacinsize, retorna el nmero de elementos en elSet, su cardinalidad.

El mtodoisEmpty, hace exactamente lo que su nombre indica, verifica si se encuentra vaca.

El mtodoadd, aumenta el elemento especificado, si este no se encuentra presente y retorna un booleano indicando si este fue o no insertado.

As mismo el mtodoremoveelimina el elemento especificado del Set si est presente. Retorna verdadero o falso si el elemento est o no presente.

El mtodoiteratorretorna unIteratorsobre elSet.

public class BuscarDuplicados {

Set s = new HashSet();

for (String cadena : args)

if (!s.add(a))

System.out.println("Duplicados encontrados: " + cadena);

System.out.println(s.size() + " palabras diferentes: " + s);

Ntese que el cdigo se refiere aCollectionpor su interfazSetal contrario de su implementacinHashSet. Esto es muy recomendado, debido a que esto nos da la flexibilidad de cambiar las implementaciones simplemente cambiando el constructor. Si alguna de las variables usada para almacenar la coleccin o los parmetros usados para pasarlo por la implementacin de Collectionen lugar de su tipo de interfaz, todas esas variables y parmetros tendrn que ser cambiados para poder cambiar el tipo de su implementacin.

El tipo de implementacin deSeten el ejemplo anterior esHashSet, lo que garantiza que los elementos estn ordenados en elSet. Si deseamos que el programa imprima en orden alfabtico, slo cambiaramos el tipo de implementacin deHashSet a TreeSet.

Operaciones adicionales.

Supngase que s1 y s2 son Sets, y las operaciones sobre estos:

s1.containsAll(s2) Retorna true si s2 es una sub coleccin de s1, es decir si s1 contiene todos los elementos de s2.

s1.addAll(s2)Transforma a s1 en la unin de s1 y s2.

s1.retainAll(s2) Transforma a s1 en la interseccin de s1 y s2. La diferencia entre s1 y s2.

Ejercicios:

Ejercicio01: Escriba el siguiente cdigo y describa lo que se hizopublic class Producto {

Producto(String s, int i)

{ nombre = s;

cantidad = i; }

String nombre;

int cantidad;}

Ejercicio02: Escriba el siguiente cdigo, los comentarios, el resultado de la ejecucin del programa y explicar.

public class Mercado {

public static void main(String args[])

{

//

Producto m = new Producto("Pan", 6);

Producto n = new Producto("Leche", 2);

Producto o = new Producto("Manzanas", 5);

Producto p = new Producto("Brocoli", 2);

Producto q = new Producto("Carne", 2);

//

ArrayList mandado = new ArrayList();

//

mandado.add(m);

mandado.add(n);

mandado.add(o);

mandado.add(p);

//

mandado.add(1, q);

mandado.add(q);

//

System.out.println(" - Lista de mandado con " + mandado.size() + " elementos");

//

for( Iterator it = mandado.iterator(); it.hasNext(); ) {

Producto x = (Producto)it.next();

System.out.println(x.nombre + " : " + x.cantidad);

}

//

mandado.remove(2);

System.out.println(" - Lista de mandado con " + mandado.size() + " elementos");

//

for( Iterator it2 = mandado.iterator(); it2.hasNext();) {

Producto x = (Producto)it2.next();

System.out.println(x.nombre + " : " + x.cantidad);

}

//

mandado.clear();

System.out.println(" - Lista de mandado final con " + mandado.size() + " elementos");

}

}

Ejercicio03: Escriba el siguiente cdigo, los comentarios, el resultado de la ejecucin del programa y explicar.

public class Mercado2 {

public static void main(String args[])

{

Producto m = new Producto("Pan", 6);

Producto n = new Producto("Leche", 2);

Producto o = new Producto("Manzanas", 5);

Producto p = new Producto("Brocoli", 2);

Producto q = new Producto("Carne", 2);

//

HashSet mandado = new HashSet();

mandado.add(m);

mandado.add(n);

mandado.add(o);

mandado.add(p);

mandado.add(q);

mandado.add(q);

//

//

System.out.println(" - Lista de mandado con " + mandado.size() + " elementos");

for( Iterator it = mandado.iterator(); it.hasNext();) {

Producto x = (Producto)it.next();

System.out.println(x.nombre + " : " + x.cantidad);

}

//

//

mandado.clear();

System.out.println(" - Lista de mandado final con " + mandado.size() + " elementos");

}

}

Ejercicio04: Escriba el siguiente cdigo, los comentarios, el resultado de la ejecucin del programa y explicar.

public class Mercado3 {

public static void main(String args[])

{ String m = new String("Pan");

String n = new String("Leche");

String o = new String("Manzanas");

String p = new String("Brocoli");

String q = new String("Carne");

String r = new String("Manzanas");

//

TreeSet mandado = new TreeSet();

mandado.add(m);

mandado.add(n);

mandado.add(o);

mandado.add(p);

mandado.add(q);

mandado.add(r);

//

//

System.out.println(" - Lista de mandado con " + mandado.size() + " elementos");

// Definir Iterator para extraer/imprimir valores

for( Iterator it = mandado.iterator(); it.hasNext();) {

//

//

String x = (String)it.next();

System.out.println(x);

}

//

//

mandado.clear();

System.out.println(" - Lista de mandado final con " + mandado.size() + " elementos");

}

}

Ejercicio 5. Desarrollar un programa que permita crear dos conjuntos sean A y B con sus elementos y realizar las operaciones de conjuntoa.

a. A U B b. A B c. A Bb. /**c. *d. * @author Cristian Jesus Torres Pachecoe. */f. import java.util.*;g. public class Conjuntoh. {i. private String[] S;j. public Conjunto()k. {l. S=null;m. }n. public Conjunto(int nElem)o. {p. S=new String[nElem];q. for(int i=0; i