Collections Framework

Olá pessoal,

Estou estudando o Collections Framework, pegando a documentação, fazendo exemplos e talz e em um desses exemplos eu tive uma resposta bem estranha…

Eu fiz um exemplo utilizando um objeto TreeSet e o mesmo ao ser exibido na tela, só exibe um objeto nele armazenado e não os três que foram armazenados…

O código está abaixo:

[code]import java.util.TreeSet;

public class TesteTreeSet {
public static void main(String[] args) {
new TesteTreeSet().comeca();
}

private void comeca() {

	TreeSet<Livro> livroSet = new TreeSet<Livro>();

	livroSet.add(new Livro("Livro1"));
	livroSet.add(new Livro("Livro2"));
	livroSet.add(new Livro("Livro3"));

	System.out.println("Livros inseridos em um TreeSet: ");
	//System.out.println(livroSet);

	for (Livro percSet : livroSet) {
		System.out.println(percSet.getNome());
	}
}

}[/code]

A Classe Livro:

[code]public class Livro implements Comparable {
private String nome;
public Livro(String n) {
this.nome = n;
}

public String getNome() {
	return this.nome;
}

public int compareTo(Object l) {
	Livro livro = (Livro) l;
	return livro.getNome().compareTo(livro.getNome());
}

}[/code]

Compilando e executando a Classe TesteTreeSet eu tenho a saída abaixo:

Livros inseridos em um TreeSet: Livro1

Deveria aparecer os outros dois livros, mas não aparecem…

Se alguém souber me ajudar a entender o porque disso, ficaria muito grato…
Abraço…

:slight_smile: :slight_smile: :slight_smile:

Teu método compareTo está estranho, ao invés de comparar o nome da instancia com o objeto que está sendo comparado, você está comparando o nome do livro a ser comparado com ele mesmo:

    public int compareTo(Object l) {   
        Livro livro = (Livro) l;   
        return livro.getNome().compareTo(getNome());   
    }   

Putz cara, verdade… Olha só quem diria… E eu achando que fosse algo relacionado a comparação de Hash nada a ver…

Vlw cara, eu arrumei aqui só coloquei um this no lugar de livro…

public int compareTo(Object l) { Livro livro = (Livro) l; return this.getNome().compareTo(livro.getNome()); }

um Abraço…

Vlw
:slight_smile: :slight_smile: :slight_smile:

Não está errado, mas não há a necessidade do uso do this

Eu sei, mas é bom colcoar o this para ficar claro de onde o getNome() está vindo e talz…

vlw…

abraço…

:slight_smile:

Achei esse post muito bom pra quem ker clariar sobre o assunto.

me ajudou…

tomara que ajude tbm outros…

abcs…