2014/05/31

Framework Collections - Interface Set - Implementação TreeSet

new Comment();
Implementa a interface SortedSet e por isso oferece a possibilidade de ordenação dos objetos adicionados. Pra conseguir ordenar um objeto, é necessário que este implemente as interfaces Comparable ou Comparator. No caso do Wrapper String, já incorpora a interface Comparable.

Uma variável do tipo de interface Set pode receber um objeto das classes HashSet, TreeSet ou LinkedHashSet.



Exemplo de uso TreeSet:

package TreeSet;

import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;

public class Main {
 public static void main(String[] args) {
  SortedSet<String> lista = new TreeSet<String>();
  lista.add("Ferran Gonzalez Alonso");
  lista.add("Sergio Gonzalez Alonso");
  lista.add("Jordi Gonzalez Alonso");
  lista.add("Alex");
  // Não irá adicionar elementos repetidos
  lista.add("Jordi Gonzalez Alonso");
  // Mostramos os elementos da lista
  System.out.println(lista);
  // Mostramos iterando
  Iterator<String> it = lista.iterator();
  while (it.hasNext()) {
   Object o = it.next();
   System.out.println(o);
  }
 }
}


Exemplo com uma classe modelo implementando a interface Comparable:
package TreeSet;

public class ContaCorrenteComparable implements
  Comparable<ContaCorrenteComparable> {

 private int conta;
 private int agencia;
 private double saldo;
 private String nome;
 
 public ContaCorrenteComparable(int conta, int agencia, double saldo,
   String nome) {
  this.conta = conta;
  this.agencia = agencia;
  this.saldo = saldo;
  this.nome = nome;
 }

 public int getConta() {
  return conta;
 }

 public void setConta(int conta) {
  this.conta = conta;
 }

 public int getAgencia() {
  return agencia;
 }

 public void setAgencia(int agencia) {
  this.agencia = agencia;
 }

 public double getSaldo() {
  return saldo;
 }

 public void setSaldo(double saldo) {
  this.saldo = saldo;
 }

 public String getNome() {
  return nome;
 }

 public void setNome(String nome) {
  this.nome = nome;
 }

 @Override
 public int compareTo(ContaCorrenteComparable outraConta) {
  int outroValor = outraConta.getConta();

  if (this.getConta() > outroValor) {
   return 1;
  } else {
   if (this.getConta() < outroValor) {
    return -1;
   }
  }
  return 0;
 }

 @Override
 public int hashCode() {
  final int prime = 31;
  int result = 1;
  result = prime * result + conta;
  return result;
 }

 @Override
 public boolean equals(Object obj) {
  if (this == obj)
   return true;
  if (obj == null)
   return false;
  if (getClass() != obj.getClass())
   return false;
  ContaCorrenteComparable other = (ContaCorrenteComparable) obj;
  if (conta != other.conta)
   return false;
  return true;
 }
 
 

}

É obrigatória a implementação do método compareTo quando estamos utilizando a interface Comparable, pois este método quem vai disponibilizar a ordenação automática. Neste caso estamos realizando a ordenação por conta, da mesma maneira garantimos com o método hashCode e equals que caso seja inserido uma conta com o mesmo número, não irá ser inserida na lista, pois é uma lista TreeSet

Classe Main:

package TreeSet;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Collection;
import java.util.Iterator;
import java.util.Locale;
import java.util.SortedSet;
import java.util.TreeSet;

public class ContaMain {
 public static void main(String[] args) {
  new ContaMain().processar();
 }
 
 public void processar(){
  // Criamos a uma lista do tipo TreeSet
  SortedSet<ContaCorrenteComparable> c = new TreeSet<>();
  // Adicionamos os elementos
  c.add(new ContaCorrenteComparable(99, 77, 0, "Ferran"));
  c.add(new ContaCorrenteComparable(01, 78, 5, "Sergio"));
  c.add(new ContaCorrenteComparable(77, 79, 1, "Jordi"));
  c.add(new ContaCorrenteComparable(0, 0, 0, "Jordi"));
  // Chamamos o método imprimir pra mostrar os elementos
  imprimir(c);
 }
 
 public void imprimir(Collection<ContaCorrenteComparable> set){
  Iterator<ContaCorrenteComparable> it = set.iterator();
  System.out.println("Conta\t\tSaldo\t\tAgencia\t\tNome\n");
  NumberFormat formatarString, formatarValor;
  formatarString = new DecimalFormat("0000");
  formatarValor = DecimalFormat.getCurrencyInstance(new Locale("pt", "BR"));
  formatarValor.setMinimumFractionDigits(2);
  while (it.hasNext()) {
   ContaCorrenteComparable c = it.next();
   System.out.println(formatarString.format(c.getConta())
     + "\t\t" + formatarValor.format(c.getSaldo())
     + "\t\t" + formatarString.format(c.getAgencia()) 
     + "\t\t" + c.getNome());
  }
 }
}

Resultado:

If You Enjoyed This, Take 5 Seconds To Share It

0 comentarios:

Postar um comentário