Pequeña explicación sobre los árboles en Java. (encontrado en toolboxnet)
TreeSet¿Que necesitamos?
Modificar la clase Producto (clase que vamos a almacenar) implementando Comparable.
Está interfaz necesita sobrescribir el método compareTo indica que atributos se usaran para comparar.
import java.util.*; public class Producto implements Comparable {
public String nombre;
public int cantidad;
public Producto(String s, int i) {
public int cantidad;
public Producto(String s, int i) {
nombre = s;
cantidad = i;
} cantidad = i;
public String toString(){
return ("Nombre: "+nombre+" Cantidad: "+cantidad);
}
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.nombre.toLowerCase();
String nombreThis = this.nombre.toLowerCase();
return( nombreThis.compareTo( nombreObjeto ) );
// 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.nombre.toLowerCase();
String nombreThis = this.nombre.toLowerCase();
return( nombreThis.compareTo( nombreObjeto ) );
}
} TreeSet no permite elementos duplicados, mantiene la lista ordenada y el elemento a comparar debe contar con métodos equals, hashCode o 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);
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();) {
" productos");
for( Iterator it = lista.iterator(); it.hasNext();) {
Producto producto = (Producto)it.next();
System.out.println(producto);
}System.out.println(producto);
}
}TreeMap
¿Que necesitamos?
Elementos están ordenados por la clave, se definen dos referencias de la interfaz SortedMap. En la primera se colocan las claves que se encuentran entre A y O. Método submap("A", "O") La segunda almacena las claves desde la P hacia el final.
Estas comparaciones se han hecho con la clase String. Otras clases deberán definir sus propios métodos compareTo, equals o hashCode.
import java.util.*;
public class AgendaTreeMap
{
public static void main(String args[])
{
public static void mostrarMapa(Map agenda) {
{
// Definir un TreeMap
TreeMap agenda = new TreeMap();
// Agregar pares "clave"-"valor" al HashMap
agenda.put("Doctor", "(+52)-4000-5000");
agenda.put("Casa", "(888)-4500-3400");
agenda.put("Hermano", "(575)-2042-3233");
agenda.put("Tio", "(421)-1010-0020");
agenda.put("Suegros", "(334)-6105-4334");
agenda.put("Oficina", "(304)-5205-8454");
agenda.put("Abogado", "(756)-1205-3454");
agenda.put("Papa", "(55)-9555-3270");
agenda.put("Tienda", "(874)-2400-8600");
// Notese que el orden del TreeMap refleja un orden ascendente
// en sus elementos independientemente del orden de insercion.
// Debido al uso de String se refleja un orden alfabetico
mostrarMapa(agenda);
// Definir dos TreeMap nuevos
SortedMap agendaAO = agenda.subMap("A", "O");
SortedMap agendaPZ = agenda.tailMap("P");
System.out.println("---- Agenda A-O ----");
mostrarMapa(agendaAO);
System.out.println("---- Agenda P-Z ----");
mostrarMapa(agendaPZ);
} TreeMap agenda = new TreeMap();
// Agregar pares "clave"-"valor" al HashMap
agenda.put("Doctor", "(+52)-4000-5000");
agenda.put("Casa", "(888)-4500-3400");
agenda.put("Hermano", "(575)-2042-3233");
agenda.put("Tio", "(421)-1010-0020");
agenda.put("Suegros", "(334)-6105-4334");
agenda.put("Oficina", "(304)-5205-8454");
agenda.put("Abogado", "(756)-1205-3454");
agenda.put("Papa", "(55)-9555-3270");
agenda.put("Tienda", "(874)-2400-8600");
// Notese que el orden del TreeMap refleja un orden ascendente
// en sus elementos independientemente del orden de insercion.
// Debido al uso de String se refleja un orden alfabetico
mostrarMapa(agenda);
// Definir dos TreeMap nuevos
SortedMap agendaAO = agenda.subMap("A", "O");
SortedMap agendaPZ = agenda.tailMap("P");
System.out.println("---- Agenda A-O ----");
mostrarMapa(agendaAO);
System.out.println("---- Agenda P-Z ----");
mostrarMapa(agendaPZ);
public static void mostrarMapa(Map agenda) {
System.out.println(" Agenda con " + agenda.size() +
" telefonos");
for( Iterator it = agenda.keySet().iterator(); it.hasNext();) {
" telefonos");
for( Iterator it = agenda.keySet().iterator(); it.hasNext();) {
String clave = (String)it.next();
String valor = (String)agenda.get(clave);
System.out.println(clave + " : " + valor);
String valor = (String)agenda.get(clave);
System.out.println(clave + " : " + valor);
}
}
Me salvaste hermano! No sabía donde estaba el error y al ver tu artículo lo encontré!!! Gracias!!!
ResponderEliminarMoniMou:)
Gracias a ti, un saludo :)
ResponderEliminarMefue muy util tu post, en cuanto a un pequeño error que tenia con el metodo compareTo()
ResponderEliminarGracias
busco como TreeMap o TreeSet organizan los Nodos. :S se que es con arbol rojo-negro pero no se como funciona ese ordenamiento,
ResponderEliminaruna consulta, el treeset no acepta repetidos, pero como controlar los repetidos, osea lo que no se agrega??...algo asi como ke te debuelva lo que se repitio
ResponderEliminarMuchas gracias de parte de una novata a la q has salvado la mañana en la oficina ;-)
ResponderEliminar