Collections Framework

5 respostas
r_Jovelli

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:

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

A Classe Livro:

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

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...

:) :) :)

5 Respostas

thiago.correa

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

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:

thiago.correa

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

r_Jovelli

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

vlw…

abraço…

:slight_smile:

fidelis_felipe

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

me ajudou…

tomara que ajude tbm outros…

abcs…

Criado 16 de outubro de 2009
Ultima resposta 28 de jul. de 2011
Respostas 5
Participantes 3