Panoramica di Comparable in Java Esempio

Paragonabile in Java è un'interferenza utilizzata per confrontare gli oggetti correnti con altri oggetti dello stesso tipo. Questo confronto può essere utilizzato per ordinare gli elementi in una raccolta. Dovrai implementare l'interfaccia in una classe per renderla ordinabile o "comparabile". Dovrai implementare solo un metodo "compareTo". Questo ordinamento di qualsiasi tipo è chiamato ordinamento naturale e il metodo "compareTo" implementato è chiamato metodo di confronto naturale. Qui in questo articolo comparabile in Java Esempio vedremo i diversi esempi comparabili in java.

Dichiarazione:

Interfaccia comparabile

Per implementare questa interfaccia, è necessario implementare questo metodo:

public int compareTo(To);

parametri:

T - è il tipo di oggetto con cui viene confrontato questo oggetto.

Valore di ritorno:

Il metodo compareTo restituisce 0 se l'oggetto specificato e questo oggetto sono uguali, restituisce un numero intero negativo se questo oggetto è inferiore all'oggetto specificato e restituisce un numero intero positivo se questo oggetto è maggiore dell'oggetto specificato.

Produce:

ClasscastException - Se l'oggetto passato a questo metodo è null

NullPointerException - Se l'oggetto passato a questo metodo non è compatibile con questo oggetto.

Le classi che implementano l'interfaccia Comparable, hanno il loro ordinamento naturale specificato con loro e quindi possono essere ordinate direttamente in Collection o Arrays usando Collections.sort () e Arrays.sort (). Inoltre, possono essere utilizzati come chiave nelle mappe e negli elementi ordinati in insiemi ordinati senza specificare Comparator separatamente.

Comprendiamo l'interfaccia comparabile con l'aiuto di un esempio:

Esempio:

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);
)
)
)

Produzione:

Spiegazione

Questa è un'applicazione per memorizzare i dettagli degli studenti.

  • Innanzitutto, abbiamo creato una classe "Studente" come rappresentazione dell'entità Studente. Conserveremo i dettagli di base come il numero del rotolo, il nome e l'età degli studenti.
  • E il requisito è di ordinare l'elenco degli studenti in base al numero di rotolo.
  • Per soddisfare questo requisito, viene implementata un'interfaccia comparabile e confrontata con gli studenti in base al numero di rotolo, come si può vedere l'implementazione del metodo "compareTo".
  • Quindi abbiamo il metodo principale per mostrare la funzionalità. Qui abbiamo creato un "TreeSet" e aggiunto cinque studenti con numeri di tiri casuali. Abbiamo usato "TreeSet" perché memorizza gli elementi in ordine.
  • Ora, se si scorre l'elenco degli studenti, scoprirai che gli studenti sono ordinati in base al numero di rotolo. Questo è il nostro requisito!
  • Potremmo anche ordinare gli studenti in base ad altri attributi come nome o età. Per fare questo, dovremo usare le variabili name o age nel metodo "compareTo" invece di "rollNo".

Esempio:

@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);
)

Comparabile vs Comparatore

Comparator è anche un'interfaccia come Comparable che viene utilizzata per confrontare due oggetti di un tipo. La differenza è che il comparatore non è implementato nella stessa classe di entità. Dobbiamo implementarlo in un'altra classe e fornirne esplicitamente l'istanza al meccanismo di ordinamento. A tale scopo, possiamo anche utilizzare un'istanza di classe anonima.

Ad esempio, supponiamo di avere una classe Student senza implementare l'interfaccia comparabile:

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 si tenta di eseguire questo programma, si otterrà questa eccezione:

Perché TreeSet ha bisogno di un modo per ordinare gli elementi.

Per risolvere questo errore, possiamo usare Comparator come implementato in questo programma:

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);
)
)
)

Puoi vedere che l'interfaccia del comparatore è implementata in una classe interna anonima e l'istanza è fornita ad TreeSet per gli elementi di ordinamento. Ora otterrai un output corretto come prima.

Interfaccia di raccolta in Java

La raccolta è l'interfaccia di root nel framework delle raccolte. Contiene la dichiarazione di tutti i metodi di uso generale implementati in raccolte come Elenchi e set. L'interfaccia di Map non estende l'interfaccia Collection perché Map è un insieme di coppie chiave-valore e non solo un insieme di elementi. Alcuni dei metodi di interfaccia Collection sono implementati in una classe astratta "AbstractCollection".

Questa interfaccia non è implementata direttamente ma estesa da interfacce specifiche poiché l'implementazione di questi metodi è specifica della raccolta. Ad esempio, alcune raccolte consentono elementi duplicati (Lista Ex) mentre altre no (Ex-Set), altre mantengono l'indicizzazione (Ex-List) mentre altre no (Ex-Set).

Alcuni metodi importanti sono descritti qui:

  1. Boolean add (E e): questo metodo aggiunge un elemento a questa raccolta e restituisce lo stato dell'operazione di aggiunta.
  2. booleano addAll (Collezione c): questo metodo aggiunge tutti gli elementi della raccolta specificata in questa raccolta e restituisce lo stato dell'operazione di aggiunta.
  3. void clear (): questo metodo rimuove tutti gli elementi da questa raccolta.
  4. booleano contiene (Oggetto o): questo metodo controlla se l'elemento specificato è presente nella raccolta o meno. Restituisce vero o falso di conseguenza.
  5. booleano contiene (Raccolta c): questo metodo controlla se tutti gli elementi della raccolta specificata sono presenti in questa raccolta o meno e restituisce vero o falso di conseguenza.
  6. boolean isEmpty (): questo metodo controlla se la raccolta è vuota o meno e restituisce true o false di conseguenza.
  7. Iteratore iteratore (): questo metodo restituisce iteratore per questa raccolta. Iterator viene utilizzato per scorrere tutti gli elementi di questa raccolta.
  8. booleano remove (Object o): questo metodo rimuove l'elemento specificato dalla raccolta e restituisce lo stato dell'operazione di rimozione.
  9. booleano removeAll (Collezione c): questo metodo rimuove tutti gli elementi da questa raccolta presenti nella raccolta specificata e in questa raccolta.
  10. booleano retainAll (Collection c): questo metodo rimuove tutti gli elementi da questa raccolta che non sono presenti nella raccolta specificata e presenti in questa raccolta.
  11. int size (): questo metodo restituisce le dimensioni di questa raccolta.
  12. Object () toArray (): questo è un metodo importante che forma e restituisce l'array contenente tutti gli elementi di questa raccolta.
  13. T () toArray (T () a): questo metodo aggiunge tutti gli elementi di questa raccolta in un array specificato e restituisce l'array. Se la dimensione dell'array è inferiore alla dimensione di questa raccolta, crea un nuovo array di tipi uguale al tipo di array specificato e lo restituisce. Se la dimensione della matrice specificata è superiore alla dimensione di questa raccolta, il valore null viene impostato per gli elementi rimanenti nella matrice e restituisce la matrice.

Conclusione - Paragonabile in Esempio Java

Riassumendo, l'interfaccia Comparable in Java è molto utile per confrontare oggetti manualmente, ordinare raccolte e matrici o disporre della raccolta ordinata stessa. Possiamo anche ordinare gli elementi in base a diversi attributi dell'entità. Non è necessario, ma è altamente raccomandato avere lo stesso risultato da uguale a e il metodo "compareTo" per evitare il caos in una raccolta che utilizza entrambi questi metodi.

Articoli consigliati

Questa è una guida al Comparable in Java Esempio. Qui discutiamo l'introduzione comparabile in Java Esempio, l'interfaccia di raccolta in Java, ecc. Puoi anche consultare i nostri altri articoli suggeriti per saperne di più–

  1. Ordinamento in Java
  2. Miglior IDE Java
  3. Sequenze in Python
  4. Funzioni stringa Oracle
  5. Guida completa all'ordinamento in C # con esempi
  6. Collezioni PL / SQL | Sintassi, tipi, eccezioni

Categoria: