miércoles, 10 de febrero de 2010

TreeSet. Manejar colecciones ordenadas. (07.03.04)

- Primero modificamos la clase Producto implementando un comparador para el ordenamiento.
- La clase implementa Comparable
- El método compareTo de la interfase Comparable indica que atributos se usaran para comparar.

import java.util.*;
public class Producto implements Comparable {

private String nombre;
private int cantidad;

public Producto(String s, int i) {
nombre = s;
cantidad = i;
}

public String toString(){
return ("Nombre: "+nombre+" Cantidad: "+cantidad);
}

public String getNombre() {
return this.nombre;
}

public boolean equals( Object objeto ) {
// Indica en base a que atributos se iguala el objeto
if (objeto == null) return false;
Producto producto = (Producto)objeto;
if (this.getNombre().equals(producto.getNombre()) ) return true;

return false;
}

public int hashCode() {
// retorna un identificador unico del objeto.
return this.getNombre().hashCode();
}

public int compareTo( Object objeto ) {
// Indica en base a que atributos se compara el objeto
// Devuelve +1 si this es > que objeto
// Devuelve -1 si this es < que objeto
// Devuelve 0 si son iguales

Producto producto = (Producto)objeto;
String nombreObjeto = producto.getNombre().toLowerCase();
String nombreThis = this.getNombre().toLowerCase();

return( nombreThis.compareTo( nombreObjeto ) );
}
}

- Un TreeSet no permite elementos duplicados.
- Un TreeSet mantiene la lista ordenada.
- El elemento a comparar debe contar con métodos equals, hashCode y compareTo.

MercadoTreeSet.java
import java.util.*;
public class MercadoTreeSet
{
public static void main(String args[])
{
// Definir 5 instancias de la Clase Producto
Producto pan = new Producto("Pan", 6);
Producto leche = new Producto("Leche", 2);
Producto manzanas = new Producto("Manzanas", 5);
Producto brocoli = new Producto("Brocoli", 2);
Producto carne = new Producto("Carne", 2);
Producto res = new Producto("Carne", 3);

// Definir un TreeSet
TreeSet lista = new TreeSet();
lista.add(pan);
lista.add(leche);
lista.add(manzanas);
lista.add(brocoli);
lista.add(carne);
lista.add(res);

// Imprimir contenido de TreeSet
// Aunque se agregan 6 elementos, el TreeSet solo contiene 5
// TreeSet no permite elementos duplicados,
// TreeSet detecta que el elemento "Carne" esta duplicado
// Notese que el orden del TreeSet refleja un orden ascendente
mostrarLista(lista);

// No es posible eliminar elementos por indice
// Un TreeSet solo elimina por valor de Objeto
lista.remove(manzanas);
mostrarLista(lista);

// Eliminar todos los valores del TreeSet
lista.clear();
mostrarLista(lista);
}

public static void mostrarLista(Collection lista) {
System.out.println(" Lista del mercado con " + lista.size() +
" productos");
for( Iterator it = lista.iterator(); it.hasNext();) {
Producto producto = (Producto)it.next();
System.out.println(producto);
}
}
}
Compartir:

6 comentarios:

  1. muy bien explicado, perfecto!
    Gracias

    ResponderEliminar
  2. excelente!!..gracias!!..me salvaste, muy bien explicado..

    ResponderEliminar
  3. Gracias es un ejemplo basico que aclara muchas dudas sobre su uso

    ResponderEliminar
  4. Gracias señor developer! es lo que estaba buscando para no hacer un cutrealgoritmo con arrays, muito sofisticado jajaj ;).

    ResponderEliminar
  5. Muchas gracias, salvaste mi duda!

    ResponderEliminar