Article image
Valdemar Taborda
Valdemar Taborda18/08/2023 09:57
Compartilhe

Praticando Interface Set & TreeSet Para Compreender melhor

    Bom Dia, segue explicação das Interfaces e testes com Set e TreeSet.

    Set é apenas uma interface. A ordem depende da implementação.

    HashSet não tem garantia nenhuma de ordem. Na prática é aleatório.

    LinkedHashSet mantém a ordem na qual os elementos são inseridos.

    TreeSet ordena os elementos de acordo com a ordenação natural (crescente, alfabética, etc). É possível passar um Comparator no construtor para especificar como ele deve ordenar caso a ordenação natural não exista ou não seja a desejada

    image

    image

    Compartilhe
    Comentários (2)
    Valdemar Taborda
    Valdemar Taborda - 18/08/2023 11:06

    Pelo que entendi segue explicação:

    Comparable altera classe que será posto,

    int = "Compara esse objeto com o objeto especificado para a ordem"


    Comparator Devera ser colocado fora da classe como nova classe.

    int = "Compara seus dois argumentos para ordem",

    boolean = "Indica se algum outro Objeto é "igual a" este comparador"



    Referencias


    Comparable X Comparator

    Comparable

    • Comparable fornece uma única sequência de ordenação. Em outras palavras, podemos ordenar a coleção com base em um único elemento, como id, nome e preço.
    • Comparable afeta a classe original, ou seja, a classe atual é modificada.
    • Comparable fornece o método compareTo() para ordenar elementos.
    • Comparable está presente no pacote java.lang.
    • Podemos ordenar os elementos da lista do tipo Comparable usando o método Collections.sort(List).

    Comparator

    • Comparator fornece o método compare() para ordenar elementos.
    • Comparator fornece múltiplas sequências de ordenação. Em outras palavras, podemos ordenar a coleção com base em múltiplos elementos, como id, nome, preço, etc.
    • Comparator não afeta a classe original, ou seja, a classe atual não é modificada.
    • Um Comparator está presente no pacote java.util.
    • Podemos ordenar os elementos da lista do tipo Comparator usando o método Collections.sort(List, Comparator).

    Collections

    • A classe Collections é uma classe utilitária do Java para operações comuns em coleções.
    • Ela fornece métodos para ordenação, busca, manipulação e sincronização de coleções.
    • O método sort() é usado para ordenar uma lista em ordem ascendente.
    • O método sort() em conjunto com Collections.reverseOrder() permite ordenar em ordem descendente.
    package main.java.comparableXcomparator;
    
    import java.util.Comparator;
    
    // Uma classe 'Livro' que implementa Comparable
    class Livro implements Comparable<Livro> {
      private String titulo;
      private String autor;
      private int ano;
    
      // Construtor
      public Livro(String ti, String au, int an) {
          this.titulo = ti;
          this.autor = au;
          this.ano = an;
      }
    
      // Usado para ordenar livros por ano
      public int compareTo(Livro l) {
          return titulo.compareTo(l.titulo);
      }
    
      // Métodos getters para acessar os dados privados
      public String getTitulo() {
          return titulo;
      }
    
      public String getAutor() {
          return autor;
      }
    
      public int getAno() {
          return ano;
      }
    }
    
    // Classe para comparar Livro por autor
    class CompararAutor implements Comparator<Livro> {
      public int compare(Livro l1, Livro l2) {
          return l1.getAutor().compareTo(l2.getAutor());
      }
    }
    
    // Classe para comparar Livro por ano
    class CompararAno implements Comparator<Livro> {
      public int compare(Livro l1, Livro l2) {
          if (l1.getAno() < l2.getAno())
              return -1;
          if (l1.getAno() > l2.getAno())
              return 1;
          else
              return 0;
      }
    }
    
    class CompararAnoAutorTitulo implements Comparator<Livro> {
    
      @Override
      public int compare(Livro l1, Livro l2) {
          int ano = Integer.compare(l1.getAno(), l2.getAno());
          if (ano != 0)
              return ano;
          int autor = l1.getAutor().compareTo(l2.getAutor());
          if (autor != 0)
              return autor;
          return l1.getTitulo().compareTo(l2.getTitulo());
      }
    }
    



    LB

    Luís Barradas - 18/08/2023 10:22

    Poderia dar um exemplo de implementação de um comparator?