Thiago,
Pedro,
Acho que é por aí.
Na verdade, na tentativa de ser conciso vi que deixei informações importantes de lado.
A classe tem dois campos importantes e não um.
Algo tipo:
class Photo implements Parcelable, Comparable {
String id;
long created;
// ...
}
O long é na verdade, uma entrada para datetime.
Só que para o hashCode() e equals() - só uso o campo id - que é o identificador único.
Mas para ordenar, utilizo somente o campo long.
Ficando assim:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Photo other = (Photo) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
@Override
public int compareTo(Photo photo) {
return (int) (photo.createdTime - this.createdTime);
}
Os métodos hashCode() e equals() foram gerados pelo Eclipse.
O que imagino é que esteja dando alguma confusão das grandes utilizar campos diferentes para igualdade e ordenação. Talvez devido ao tipo de busca na estrutura de árvore.
Em 2 de janeiro de 2014 16:03, Thiago Resek <thiago.ec05@gmail.com> escreveu:
Aliás, fazendo uns testes aqui, vi que ele chama os 2 métodos (equals e compareTo). Provavelmente ele deve fazer algum tipo de busca binária, dado que o conjunto é mantido ordenado.Ou seja, o problema pode estar em qualquer um dos dois métodos.Espero ter ajudado! Att,
Resek--2014/1/2 Thiago Resek <thiago.ec05@gmail.com>
Oi Gink,Tenho quase certeza que o Comparable é usado pra identificar igualdade no TreeSet.Veja na documentação: "aTreeSet
instance performs all element comparisons using itscompareTo
(orcompare
) method,"Minha dica seria olhar no compareTo. Mas, por via das dúvidas, posta o código dos dois métodos aqui =)2014/1/2 Pedro Cortez <pedro.fellipe.cortez@gmail.com>
Sim, de fato. Esse metodo equals seu que deve estár estranho. Posta ele ai por favoratt,
Pedro Cortez2014/1/2 Gink Labrev <gink.labrev@gmail.com>Sim, galera.Esqueci de mencionar isso.Estou implementando o Comparable sim (mas não Comparator).Mas até onde sei, o Comparable é usado para ordenação. Não impacta no fato de identificar se dois objetos são iguais. Para isto, seria usado o hashCode() e equals().AbsEm 2 de janeiro de 2014 10:09, Flaviano Gomes <p4rdal@gmail.com> escreveu:
X { String campo1; /* ... outros campos irrelevantes */ }TreeSet<X> set = new TreeSet<X>(new Comparator<X>(){public String compare(X a, X b){return a.campo1.equals(b.campo1);}}Em 2 de janeiro de 2014 07:08, Thiago Resek <thiago.ec05@gmail.com> escreveu:
Oi Gink,Pra usar o TreeSet, sua classe X tem que implementar a interface Comparable, se não me engano (ou vc tem que fornecer um comparador).Vc fez isso? Se sim, poste o código...Pode ser que o probelma esteja aí...Abs;Thiago Resek--2014/1/2 Gink Labrev <gink.labrev@gmail.com>
Pessoal,--Tenho uma classe assimX { String campo1; /* ... outros campos irrelevantes */ }E usei o gerador automatico do Eclipse para hashCode() e equals(), levando em conta somente o campo1.Dado o seguinte.X x1 = new X("A");X x2 = new X("B");X x3 = new X("C");
Se faço x1.equals(x2) e x1.equals(x3) dá false, conforme esperado.Mas se faço:Set<X> ts = new TreeSet<X>();ts.add(x2);ts.add(x3);
ts.contains(x1);O código acima retorna true !!O que pode estar acontecendo ??Abs;
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
Thiago Resek Fabri dos Anjos
Computer Engineer
--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
--Flaviano Danilo Gomes[Aracaju - SE - Brazil]--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
--
Thiago Resek Fabri dos Anjos
Computer Engineer
--
Thiago Resek Fabri dos Anjos
Computer Engineer
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
0 comentários:
Postar um comentário