L'interfaccia Java Comparable viene utilizzata per ordinare gli oggetti della classe definita dall'utente. Questa interfaccia si trova nel pacchetto java.lang e contiene solo un metodo denominato compareTo(Object). Fornisce una sola sequenza di ordinamento, ovvero è possibile ordinare gli elementi solo sulla base di un singolo membro dati. Ad esempio, potrebbe essere il numero di matricola, il nome, l'età o qualsiasi altra cosa.
metodo compareTo(Oggetto oggetto).
public int compareTo(Oggetto oggetto): Viene utilizzato per confrontare l'oggetto corrente con l'oggetto specificato. Ritorna
- intero positivo, se l'oggetto corrente è maggiore dell'oggetto specificato.
- intero negativo, se l'oggetto corrente è inferiore all'oggetto specificato.
- zero, se l'oggetto corrente è uguale all'oggetto specificato.
Possiamo ordinare gli elementi di:
- Oggetti stringa
- Oggetti di classe wrapper
- Oggetti di classe definiti dall'utente
Classe di collezioni
Collezioni La classe fornisce metodi statici per ordinare gli elementi delle raccolte. Se gli elementi della raccolta sono Set o Map, possiamo utilizzare TreeSet o TreeMap. Tuttavia, non possiamo ordinare gli elementi di List. La classe Collections fornisce metodi per ordinare gli elementi di tipo List.
Metodo della classe Collections per l'ordinamento degli elementi dell'elenco
public void sort(Lista elenco): Viene utilizzato per ordinare gli elementi di List. Gli elementi dell'elenco devono essere di tipo Comparabile.
Nota: la classe String e le classi Wrapper implementano l'interfaccia Comparable per impostazione predefinita. Pertanto, se memorizzi gli oggetti delle classi string o wrapper in un elenco, set o mappa, sarà Comparable per impostazione predefinita.
Esempio comparabile Java
Vediamo l'esempio dell'interfaccia Comparable che ordina gli elementi della lista in base all'età.
File: Student.java
class Student implements Comparable{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } public int compareTo(Student st){ if(age==st.age) return 0; else if(age>st.age) return 1; else return -1; } }
File: TestSort1.java
import java.util.*; public class TestSort1{ public static void main(String args[]){ ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,'Jai',21)); Collections.sort(al); for(Student st:al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } }
105 Jai 21 101 Vijay 23 106 Ajay 27
Esempio comparabile Java: ordine inverso
Vediamo lo stesso esempio dell'interfaccia Comparable che ordina gli elementi della lista in base all'età in ordine inverso.
File: Student.java
class Student implements Comparable{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } public int compareTo(Student st){ if(age==st.age) return 0; else if(age<st.age) return 1; else -1; } < pre> <p>File: TestSort2.java</p> <pre> import java.util.*; public class TestSort2{ public static void main(String args[]){ ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,'Jai',21)); Collections.sort(al); for(Student st:al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } } </pre> <pre> 106 Ajay 27 101 Vijay 23 105 Jai 21 </pre></st.age)>
106 Ajay 27 101 Vijay 23 105 Jai 21