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:
- 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.
- 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.
- void clear (): este método remove todos os elementos desta coleção.
- 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.
- 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.
- boolean isEmpty (): este método verifica se a coleção está vazia ou não e retorna verdadeiro ou falso de acordo.
- Iterador iterador (): este método retorna o iterador para esta coleção. O iterador é usado para percorrer todos os elementos nesta coleção.
- boolean remove (Object o): Este método remove o elemento especificado da coleção e retorna o status da operação de remoção.
- 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.
- 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.
- int size (): esse método retorna o tamanho desta coleção.
- Object () toArray (): este é um método importante que forma e retorna a matriz que contém todos os elementos desta coleção.
- 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:
- Classificação em Java
- Melhor IDE Java
- Sequências em Python
- Funções de String do Oracle
- Guia completo para classificação em c # com exemplos
- Coleções PL / SQL | Sintaxe, Tipos, Exceções