miércoles, 10 de febrero de 2010

Collections. Ordenar y buscar en Colecciones. (07.03.05)

- La clase Collections (que no es la interface Collection) nos permite ordenar y buscar elementos en listas.
- Se usaran los métodos sort y binarySearch
- Los objetos de la lista deben tener métodos equals, hashCode y compareTo adecuados.

MercadoCollections.java
import java.util.*;
public class MercadoCollections
{
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);

// Definir un ArrayList
ArrayList lista = new ArrayList();

// Colocar Instancias de Producto en ArrayList
lista.add(pan);
lista.add(leche);
lista.add(manzanas);
lista.add(brocoli);
lista.add(1,carne);

// Imprimir contenido de ArrayList
mostrarLista(lista);

// Ordenar elemntos de ArrayList
Collections.sort(lista);

// Imprimir contenido de ArrayList
mostrarLista(lista);

// Buscar un elemento que se compare con Pan de tipo String
String buscar = "Pan";
int indice = Collections.binarySearch(lista,buscar);

System.out.println(buscar+" es el elemento "+indice);

}

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


Producto.java
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() == 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

// Dependera del argumento como comparar los atributos.
String nombreObjeto;
if (objeto instanceof Producto ) {
Producto producto = (Producto)objeto;
nombreObjeto = producto.getNombre().toLowerCase();
}
else
if (objeto instanceof String) {
String producto = (String)objeto;
nombreObjeto = producto.toLowerCase();
}
else {
nombreObjeto = "";
}

String nombreThis = this.getNombre().toLowerCase();

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

1 comentario:

  1. disculpa copie tu código y me sale error en la parte donde haces la búsqueda binaria.
    Me podrías decir porque por favor gracias =)

    ResponderEliminar