domingo, 8 de julho de 2012

[JAVA] Implementando TreeSet e Comparable

Olá pessoal, hoje iremos ver mais um exemplo de uma das implementações de conjuntos (Set) que é a TreeSet.

TreeSet utiliza Red-Black Tree que é uma implementação bastante otimizada de árvores, pois garante a inserção, busca e exclusão em um tempo O(log n). Para mais informações sobre Red-black tree, clique aqui.

É bom lembrar que, em conjuntos, não é permitida a inserção de elementos duplicados. 

A TreeSet organiza os dados de acordo com algum critério. Você pode definir qual é esse critério, por isso iremos implementar a interface Comparable.

Objetivo do programa: ordenar os produtos através do id em ordem decrescente.

Primeiramente temos uma classe chamada Produtos, segue o código da classe:


Linha 9: construtor da classe.

Linha 14: implementação do método toString, pois na hora de percorrer os elementos da minha TreeSet, quero mostrar o id de cada produto.

Linha 19: implementação do método compareTo da interface Comparable, nele eu indico o critério da ordenação. Se os id's forem iguais então retorna 0. Se o id deste produto for maior que o id do produto passado por parâmetro, então retorno -1, isso indica que este produto deve vir antes (objetivo é ordenar de forma decrescente). Senão, retorno 1 indicando que este produto deve vir depois.

Agora iremos ver a classe para testar utilizando TreeSet e os métodos que acabamos de implementar:


Linhas 10 à 13: criação de novos produtos com seus respectivos id's.

Linha 14: criação da minha treeSet que é do tipo Produto.

Linha 15: declaração do iterador (iterator). É bom lembrar que conjuntos não possuem indexação, ou seja, temos que percorrer através de iteradores.

Linhas 17 à 20: adiciono os produtos à minha treeSet.

Linha 21: obtenho o iterador da treeSet.

Linha 23: percorro a treeSet mostrando os elementos. Caso eu não tivesse implementado o método toString() na classe Produto, então a saída do programa ficaria estranha, tire o método toString() da classe Produto e veja o que acontece com a saída.

Então é isso pessoal, quaisquer dúvidas deixem nos comentários. Até a próxima!


Nenhum comentário: