Duvida basica compareTo...[RESOLVIDO]

8 respostas
evertonsilvagomesjav

Se eu implemento Comparable e sobreescrevo compareTo dessa forma tudo bem…

// aqui eu sei que ele vai comparar usando o compareTo da classe Integer pq "num" é um Integer. public int compareTo(TestArrayList o) { // TODO Auto-generated method stub return this.num.compareTo(o.num);

E se eu fizer dessa forma o que acontece na comparaçao, nada né?

public int compareTo(TestArrayList o) { // TODO Auto-generated method stub return 5;

Tem outra maneira de usar compareTo e compare, sem usar compareTo das classes Wrappers e String?

8 Respostas

E

Você entendeu o que faz compareTo? Ele tem de voltar um valor positivo (digamos +1) se o valor do objeto é maior que o valor a ser comparado, um valor negativo (digamos -1) se o valor do objeto é menor que o valor a ser comparado, e 0 se o valor é igual ao valor comparado.

evertonsilvagomesjav

Sim eu sei, mas no caso se eu sobreescrever dessa forma:

public int compareTo(TestArrayList o) { // TODO Auto-generated method stub return 5

ele sempre vai retorna 5, daí ele nao vai estar comparando nada? Pq nem sequer ele esta usando o objeto “o” nem o this, pra fazer essa comparaçao e retornar positivo, negativo ou 0 se for igual…

E

Pois é, se sempre retornar 5, então você implementou incorretamente compareTo.
Ele não é que “não faz nada”; ele está retornando um resultado incorreto se o objeto passado como parâmetro for < ou == ao objeto. Se for >, então está retornando um valor > 0, e só nesse caso ele volta um valor correto (é igual à história do relógio parado - ele está certo duas vezes por dia, e errado no resto do dia).

mario.fts

O que vc fez é que o objeto sempre será “maior” que o outro objeto que vc estiver comparando. De acordo com o contrato do método, está errado. nada impede vc de fazer isso, mas não deixa de ser errado. é como sobreescrever o equals e retornar true ou false sempre.

evertonsilvagomesjav

kkkkkkk, entendi então vai retornar um valor correto somente se o objeto que chamou compareTo for maior, mas e se por um acaso for menor? Acontece erro em tempo de execução ou nada acontece?

E

Não retorna erro nenhum, mas coisas que você esperaria que funcionassem (como ordenação com Collections.sort) não vão funcionar direito. OK?

mario.fts

se o objeto for menor, ele vai continuar falando que é maior. ai a ordem vai estar errada no final.

evertonsilvagomesjav

Ahh sim entendido entao, obrigado entenglament e mario.

Criado 9 de fevereiro de 2010
Ultima resposta 9 de fev. de 2010
Respostas 8
Participantes 3