Pessoal, boa tarde. Antes de postar esse tópico pesquisei pelo assunto, mas não o encontrei.
Minha dúvida é o seguinte:
Usando a interface Comparable, pude perceber que quando utilizamos o método sobrescrito compareTo(Object o), dependendo de como o declare, afeta a ordem de impressão na tela. Ex.:
package teste07052011;
import java.util.*;
class Carro2 implements Comparable<Object>{
Integer chassi;
String modelo;
Carro2(Integer chassi, String modelo){
this.chassi=chassi;
this.modelo=modelo;
}
public String toString(){
return modelo + " ";
}
public int hashCode(){
return 13;
}
public boolean equals(Object o){
Carro2 c = (Carro2)o;
if(this.equals(c.modelo))
return true;
else
return false;
}
public int compareTo(Object o){
//return this.modelo.compareTo(((Carro2)o).modelo);
Carro2 x = (Carro2)o;
//return x.chassi.compareTo(this.chassi);
return this.chassi.compareTo(x.chassi);
}
}
public class TesteMap2 {
public static void main(String args[]){
Map <Carro2, Object> lista = new TreeMap<Carro2,Object>();
Carro2 c1 = new Carro2(1,"A");
Carro2 c2 = new Carro2(2,"B");
Carro2 c3 = new Carro2(3,"C");
Carro2 c4 = new Carro2(1,"A");
Carro2 c5 = new Carro2(2,"B");
lista.put(c1, "Mariana");
lista.put(c2, "Roberto");
lista.put(c3, "Stella");
lista.put(c4, "Rubens");
lista.put(c4, "Rubens");
lista.put(c5, "Tralala");
System.out.println(lista);
}
}
Imprime: {A =Rubens, B =Tralala, C =Stella}.
Notem que usei o código compareTo dessa forma:
public int compareTo(Object o){
//return this.modelo.compareTo(((Carro2)o).modelo);
Carro2 x = (Carro2)o;
//return x.chassi.compareTo(this.chassi);
return this.chassi.compareTo(x.chassi);
}
E no código:
package teste07052011;
import java.util.*;
class Carro2 implements Comparable<Object>{
Integer chassi;
String modelo;
Carro2(Integer chassi, String modelo){
this.chassi=chassi;
this.modelo=modelo;
}
public String toString(){
return modelo + " ";
}
public int hashCode(){
return 13;
}
public boolean equals(Object o){
Carro2 c = (Carro2)o;
if(this.equals(c.modelo))
return true;
else
return false;
}
public int compareTo(Object o){
//return this.modelo.compareTo(((Carro2)o).modelo);
Carro2 x = (Carro2)o;
return x.chassi.compareTo(this.chassi);
//return this.chassi.compareTo(x.chassi);
}
}
public class TesteMap2 {
public static void main(String args[]){
Map <Carro2, Object> lista = new TreeMap<Carro2,Object>();
Carro2 c1 = new Carro2(1,"A");
Carro2 c2 = new Carro2(2,"B");
Carro2 c3 = new Carro2(3,"C");
Carro2 c4 = new Carro2(1,"A");
Carro2 c5 = new Carro2(2,"B");
lista.put(c1, "Mariana");
lista.put(c2, "Roberto");
lista.put(c3, "Stella");
lista.put(c4, "Rubens");
lista.put(c4, "Rubens");
lista.put(c5, "Tralala");
System.out.println(lista);
}
}
Retorna: {C =Stella, B =Tralala, A =Rubens}, ou seja, o inverso do primeiro.
Como podem ver, troquei o retorno nesse último, do método compareTo, de return this.chassi.compareTo(x.chassi);, para: return x.chassi.compareTo(this.chassi);
Por que a troca de this.chassi para x.chassi, inverte a ordem decrescente? :?