Visão geral do exemplo comparável em Java

Comparável em Java é uma interferência usada para comparar objetos atuais com outros objetos do mesmo tipo. Essa comparação pode ser usada para classificar elementos em uma coleção. Você precisará implementar a interface em uma classe para torná-la classificável ou "comparável". Você precisará implementar apenas um método "compareTo". Essa ordem de qualquer tipo é chamada de ordem natural e o método "compareTo" implementado é chamado de método de comparação natural. Aqui neste artigo Exemplo comparável em Java, veremos os diferentes exemplos comparáveis ​​em java.

Declaração:

Interface Comparável

Para implementar essa interface, você deve implementar este método:

public int compareTo(To);

Parâmetros:

T - é o tipo de objeto com o qual esse objeto é comparado.

Valor de retorno:

O método compareTo retorna 0 se o objeto especificado e esse objeto for igual, retorna um número inteiro negativo se esse objeto for menor que o objeto especificado e retornará um número inteiro positivo se esse objeto for maior que o objeto especificado.

Lances:

ClasscastException - se o objeto passado para este método for nulo

NullPointerException - se o objeto passado para esse método não for compatível com esse objeto.

As classes que implementam a interface Comparable têm suas ordens naturais especificadas com elas e, portanto, podem ser classificadas diretamente em Collection ou Arrays usando Collections.sort () e Arrays.sort (). Além disso, eles podem ser usados ​​como a chave em mapas e elementos classificados em conjuntos classificados, sem especificar o Comparator separadamente.

Vamos entender a interface comparável com a ajuda de um exemplo:

Exemplo:

package comparableDemo;
import java.util.TreeSet;
public class Student implements Comparable (
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public int compareTo(Student o) (
if (this.rollNo > o.rollNo) (
return 1;
) else if (this.rollNo == o.rollNo) (
return 0;
) else (
return -1;
)
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
TreeSet students = new TreeSet();
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Resultado:

Explicação

Esta é uma aplicação para armazenar detalhes dos alunos.

  • Primeiro, criamos uma classe "Aluno" como a representação da entidade Aluno. Vamos armazenar detalhes básicos como número do rolo, nome e idade dos alunos.
  • E o requisito é classificar a lista de alunos com base no número do rolo.
  • Para atender a esse requisito, uma interface comparável é implementada e comparada aos alunos com base no número do rolo, como você pode ver a implementação do método "compareTo".
  • Então nós temos o método principal para mostrar a funcionalidade. Aqui, criamos um "TreeSet" e adicionamos cinco alunos com números de rolo aleatórios. Nós usamos “TreeSet” porque ele armazena elementos em ordem classificada.
  • Agora, se você percorrer a lista de alunos, verá que os alunos são classificados com base no número do rolo. Essa é a nossa exigência!
  • Também podemos classificar os alunos com base em outros atributos, como nome ou idade. Para fazer isso, teremos que usar variáveis ​​de nome ou idade no método "compareTo" em vez de "rollNo".

Exemplo:

@Override
public int compareTo(Student o) (
if (this.age> o.age) (
return 1;
) else if (this.age == o.age) (
return 0;
) else (
return -1;
)
)
OR
@Override
public int compareTo(Student o) (
return this.name.compareTo(o.name);
)

Comparável vs Comparador

Comparator também é uma interface como Comparable, usada para comparar dois objetos de um tipo. A diferença é que o Comparator não é implementado na própria classe de entidade. Devemos implementá-lo em outra classe e fornecer a instância dele para o mecanismo de classificação explicitamente. Também podemos usar uma instância de classe anônima para esse fim.

Por exemplo, suponha que tenhamos uma classe Student sem implementar a interface Comparable:

package comparableDemo;
import java.util.TreeSet;
public class Student(
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
TreeSet students = new TreeSet();
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Se você tentar executar este programa, você receberá esta exceção:

Porque o TreeSet precisa de uma maneira de classificar os elementos.

Para resolver esse erro, podemos usar o Comparator conforme implementado neste programa:

package comparableDemo;
import java.util.Comparator;
import java.util.TreeSet;
public class Student (
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
Comparator studentComparator = new Comparator() (
@Override
public int compare(Student o1, Student o2) (
if (o1.rollNo < o2.rollNo) (
return -1;
) else if (o1.rollNo == o2.rollNo) (
return 0;
) else (
return 1;
)
)
);
TreeSet students = new TreeSet(studentComparator);
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Você pode ver que a interface Comparator é implementada em uma classe interna anônima e a instância é fornecida ao TreeSet para classificar elementos. Agora você obterá uma saída adequada como anteriormente.

Interface de coleção em Java

A coleção é a interface raiz na estrutura de coleções. Ele contém a declaração de todos os métodos de uso geral implementados em coleções como Listas e Conjuntos. A interface Map não estende a interface Collection porque Map é uma coleção de pares de valores-chave e não apenas uma coleção de elementos. Alguns dos métodos de interface Collection são implementados em uma classe abstrata "AbstractCollection".

Essa interface não é implementada diretamente, mas estendida por interfaces específicas, porque a implementação desses métodos é específica da coleção. Por exemplo, algumas coleções permitem elementos duplicados (Ex-List), enquanto outros não (Ex-Set), alguns mantêm a indexação (Ex-List), enquanto outros não (Ex-Set).

Alguns métodos importantes são descritos aqui:

  1. Inclusão booleana (E e): esse método adiciona um elemento a essa coleção e retorna o status da operação de adição.
  2. addAll booleano (Coleção c): esse método adiciona todos os elementos da coleção especificada a essa coleção e retorna o status da operação de adição.
  3. void clear (): este método remove todos os elementos desta coleção.
  4. boolean contém (Objeto o): Este método verifica se o elemento especificado está presente na coleção ou não. Retorna verdadeiro ou falso de acordo.
  5. boolean contém (Coleção c): Este método verifica se todos os elementos da coleção especificada estão presentes nessa coleção ou não e retorna verdadeiro ou falso de acordo.
  6. boolean isEmpty (): este método verifica se a coleção está vazia ou não e retorna verdadeiro ou falso de acordo.
  7. Iterador iterador (): este método retorna o iterador para esta coleção. O iterador é usado para percorrer todos os elementos nesta coleção.
  8. boolean remove (Object o): Este método remove o elemento especificado da coleção e retorna o status da operação de remoção.
  9. boolean removeAll (Collection c): Este método remove todos os elementos desta coleção que estão presentes na coleção especificada e nesta coleção.
  10. boolean RetourAll (Collection c): Este método remove todos os elementos desta coleção que não estão presentes na coleção especificada e presentes nesta coleção.
  11. int size (): esse método retorna o tamanho desta coleção.
  12. Object () toArray (): este é um método importante que forma e retorna a matriz que contém todos os elementos desta coleção.
  13. T () toArray (T () a): esse método adiciona todos os elementos dessa coleção em uma matriz especificada e retorna a matriz. Se o tamanho da matriz for menor que o tamanho desta coleção, ele criará uma nova matriz de tipos igual ao tipo da matriz especificada e a retornará. Se o tamanho da matriz especificada for maior que o tamanho desta coleção, o valor nulo será definido para os elementos restantes na matriz e retornará a matriz.

Conclusão - Exemplo comparável em Java

Para resumir, a interface Comparável em Java é muito útil para comparar objetos manualmente, classificar coleções e matrizes ou para ter a própria coleção classificada. Também podemos classificar elementos com base em diferentes atributos da entidade. Não é necessário, mas é altamente recomendável obter o mesmo resultado de iguais e o método "compareTo" para evitar a bagunça em uma coleção que usa esses dois métodos.

Artigos recomendados

Este é um guia para Exemplo comparável em Java. Aqui discutimos o exemplo Introdução comparável em Java, interface Collection em Java etc. Você também pode consultar nossos outros artigos sugeridos para saber mais:

  1. Classificação em Java
  2. Melhor IDE Java
  3. Sequências em Python
  4. Funções de String do Oracle
  5. Guia completo para classificação em c # com exemplos
  6. Coleções PL / SQL | Sintaxe, Tipos, Exceções