1
resposta

Resposta para criação do Objeto do tipo TreeSet apresentar erro.

Aparece uma mensagem de erro pois a classe precisa implementar a interface Comparator na Classe Recibo pois o TreeSet guarda os dados de maneira natural por isso necessita da interface Comparator.

1 resposta

Olá Cleiton!

O TreeSet guarda os elementos em sua ordem natural seguindo a estrutura de uma árvore, por isso é obrigatório existir uma forma de comparar os elementos. Você pode implementar a interface Comparable no tipo de elemento que está usando no TreeSet<Tipo> ou usar o contrutor que recebe um Comparator<Tipo>.

Por exemplo:

  • Tipo que implementa a interface Comparable

    public class Tipo implements Comparable<Tipo> {
      private final Integer id;
    
      public Tipo(int id) {
          this.id = id;
      }
    
    @Override
    public int compareTo(Tipo o) {
      return id.compareTo(o.id);
    }
    }
  • Tipo que não implementa Comparable

class TipoSemComparable {
  private final Integer id;

  TipoSemComparable(int id) {
    this.id = id;
  }

  public Integer getId() {
    return id;
  }
}
  • Exemplos para instanciar TreeSet

class Main {

public static void main(String[] args) {
     Tipo tipoComComparable = new Tipo(1);

    TipoSemComparable tipoSemComparable = new TipoSemComparable(2);

    TreeSet<Tipo> arvoreDeTipoComComparable = new TreeSet<>();
    arvoreDeTipoComComparable.add(tipoComComparable);
    arvoreDeTipoComComparable.forEach(System.out::println);

    TreeSet<TipoSemComparable> arvoreDeTipoSemComparable = new TreeSet<>(
        Comparator.comparing(TipoSemComparable::getId));
    arvoreDeTipoSemComparable.add(tipoSemComparable);
    arvoreDeTipoSemComparable.forEach(System.out::println);

    TreeSet<TipoSemComparable> vaiDarErro = new TreeSet<>();
    vaiDarErro.add(tipoSemComparable); // nessa linha vai haver um ClassCastException, pois não é Comparável (implementa Comparable)
  }
}