Duvida comparable e comparator

5 respostas
LPJava

ae pessoal to com maior duvida na implementacao das duas interfaces… assim nao conseguir abstratir sua sintaxe de implementação… quem tiver ai um codigo simples usando as mesma fico agradecido… eu uso elas quando tenho que classficar instancia de uma classe? :S n sei direito to meio confuso

valeu!!

5 Respostas

T

“Comparable” você usa quando vai implementar uma classe que tem uma determinada “ordem natural”.
Por exemplo, digamos que você tenha uma classe Cliente, contendo um atributo “id”. Você ordenaria os clientes por esse ID.

“Comparator” você usa quando vai implementar uma classe que serve para comparar outras classes.
Por exemplo, digamos que você queira ordenar uma lista de objetos da classe Cliente pelo atributo “nome”. Você pode ordenar os clientes usando esse atributo, mas como ele já implementa Comparable, você precisa de uma outra classe que serve para efetuar essa comparação alternativa.

LPJava

assim thingol o “Comparable” eu informo qual vai ser a regra de classificacao:

import java.util.*;
classe Cliente implements Comparable{
int cod;
public int compareTo(Cliente d){
return cod.compare(d.cod);
}

to me perdendo nessa implementacação…

e o Comparator, posso ter varios tipos de classficicação exemplo: idade, cor, sexo etc… se baseando na class Clientes?

T
// Java 1.4 ou anterior
classe Cliente implements Comparable {
    String cod;
    // Note que para implementar corretamente Comparable, você
    // precisa usar a declaração idêntica - é Object, não Cliente.
    public int compareTo(Object d){
        // Se o campo implementar Comparable, como é o caso do tipo String,
        // posso usar compareTo. 
        return cod.compareTo (((Cliente)d).cod);
    }
}
// Java 5.0 ou posterior
// Note que sou obrigado a usar Generics aqui...
classe Cliente implements Comparable<Cliente> {
    String cod;
    // Como você está usando Generics e declarou direitinho
    // o tipo argumento aqui (Cliente), você pode declarar
    // corretamente aqui:
    public int compareTo(Cliente d){
        return cod.compare(d.cod);
    }
}
T

Você pode criar um Comparator para cada classificação desejada (o que é mais fácil) ou então ter um Comparator genérico, que recebe no seu construtor um parâmetro indicando por que campo você quer fazer a ordenação.

Mantu

http://www.guj.com.br/posts/list/45985.java#241201

Criado 16 de fevereiro de 2007
Ultima resposta 16 de fev. de 2007
Respostas 5
Participantes 3