[Resolvido]Duplicatas no TreeSet

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());
		}

	}
}

Bem, deveria ler a API né… mas tudo bem eu não sabia que o contrato de compareTo
devia ser consistente com o equals…

Valeu.