domingo, 22 de enero de 2012

Tutorial Java 5 - Collections

Collections es una interfaz que nos permitirá ordenar la lista con respecto a los parámetros que queramos.
Ejemplo comentado de como ordenar con Collections, usamos de base las clases del tutorial 4:

En la clase ordenador añadimos:

public class ordenador implements Comparable<ordenador>{ }
cambiamos int por Integer:
private Integer frecuencia, memoria;
Y escribimos el método señalando lo que vamos a comparar:

public int compareTo(ordenador o) {
return (frecuencia.compareTo(((ordenador) o).frecuencia));
}


En la clase programa1 añadimos:
import java.util.Collections;
Y después del bucle While, para que al terminar la lista la ordene con nuestro método:
Collections.sort(ordenadores);


Ahora al presentar los ordenadores los pondrá en orden ascendente de frecuencias.

Códigos completos:

Clase programa1:

import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;
public class programa1 {

static private LinkedList<ordenador> ordenadores = new LinkedList<ordenador>();
public static void main(String[] args) {

ordenador cpu;
cpu = new ordenador("string", "string", 0, 0);

String procesador="procesador";
String salir = "salir";
while(!(procesador.equals(salir)))
{
Scanner entrada = new Scanner(System.in);
System.out.println("Introduzca tipo de procesador o escriba salir:");
procesador = entrada.nextLine();
if (procesador.equals(salir)) break;
System.out.println("Introduzca frecuencia en GHz:");
int frecuencia = entrada.nextInt();
System.out.println("Introduzca tipo de gráfica:");
entrada.next();
String grafica = entrada.nextLine();
System.out.println("Introduzca cantidad de memoria en Mb:");
int memoria = entrada.nextInt();

ordenadores.add(new ordenador(procesador, grafica, frecuencia, memoria));
}
Collections.sort(ordenadores);

for (ordenador o : ordenadores) //recorremos los objetos "o" de tipo ordenador de la lista ordenadores
{
System.out.println("Tiene un procesador de tipo " + o.getProcesador() + " a " + o.getFrecuencia() + " GHz");
System.out.println("Tiene una gráfica de tipo " + o.getGrafica() + "con " + o.getMemoria() + " Mb");
}
}
}

Clase ordenador:


public class ordenador implements Comparable<ordenador> {
private String procesador, grafica;
private Integer frecuencia, memoria;

public ordenador(String proce, String gra, int frec, int me)
{
procesador=proce;
grafica=gra;
frecuencia=frec;
memoria=me;
}

public String getProcesador() {
return procesador;
}

public void setProcesador(String procesador) {
this.procesador = procesador;
}

public String getGrafica() {
return grafica;
}

public void setGrafica(String grafica) {
this.grafica = grafica;
}

public int getFrecuencia() {
return frecuencia;
}

public void setFrecuencia(int frecuencia) {
this.frecuencia = frecuencia;
}

public int getMemoria() {
return memoria;
}

public void setMemoria(int memoria) {
this.memoria = memoria;
}

public int compareTo(ordenador o) {
return (frecuencia.compareTo(((ordenador) o).frecuencia));
}

}


Opcional en orden descendente con comparator:
Añadimos en la clase principal:
import java.util.Comparator; 
Si queremos que sea en orden descendente cambiamos el collections.sort por este:
Collections.sort(ordenadores,new ordenar());
 y creamos la clase ordenar en la clase principal:
class ordenar implements Comparator<ordenador> {
public int compare(ordenador o_1, ordenador o_2) {
return (-(o_1.compareTo(o_2)));
}
}

No hay comentarios:

Publicar un comentario