Bom apesar de ter visitado alguns posts, não estou conseguindo entender o comportamento do TreeSet que implementei,se alguém puder me ajudar agradeço muito…, meu TreeSet está aceitando duplicatas, mesmo com o fato de os dois objetos serem considerados iguais, como pode ser comprovado na saída do System.out… no código fonte que está abaixo…, usei um Comparator no construtor pois queria ver a coleção sendo ordenada pelo atributo classificação…, porém ele esta permitindo que dois objetos “considerados” iguais pelo método “equals” entrem na coleção.
Segue abaixo a saída e os códigos da classe livro e a classe ExperimentoTreeSet:
package Colecoes;
public class Livro {
private String classificacao;
private String titulo;
public final String getClassificacao() {
return classificacao;
}
public final void setClassificacao(String classificacao) {
this.classificacao = classificacao;
}
public final String getTitulo() {
return titulo;
}
public final void setTitulo(String titulo) {
this.titulo = titulo;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((titulo == null) ? 0 : titulo.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;
Livro other = (Livro) obj;
if (titulo == null) {
if (other.titulo != null)
return false;
} else if (!titulo.equals(other.titulo))
return false;
return true;
}
@Override
public String toString() {
return getTitulo();
}
}
package Colecoes;
import java.util.Collection;
import java.util.Comparator;
import java.util.TreeSet;
public class ExperimentoTreeSet {
public static void main(String[] args) {
Collection<Livro> setLivro = new TreeSet<Livro>(new Comparator<Livro>() {
@Override
public int compare(Livro o1, Livro o2) {
return o1.getClassificacao().compareTo(o2.getClassificacao());
}
});
Livro livro1 = new Livro();
Livro livro2 = new Livro();
Livro livro3 = new Livro();
livro1.setTitulo("Intocáveis");
livro1.setClassificacao("a");
livro2.setTitulo("Intocáveis");
livro2.setClassificacao("c");
livro3.setTitulo("A Procura de um milagre");
livro3.setClassificacao("b");
System.out.println("São iguais? " + livro1.equals(livro2));
setLivro.add(livro1);
setLivro.add(livro2);
setLivro.add(livro3);
for(Livro livro : setLivro){
System.out.println("Titulo: "+livro.getTitulo()+" Classificacao: "+livro.getClassificacao());
}
}
}