Per ordinare liste di oggetti in Java sono a disposizione due interfacce:
- java.lang.Comparable
- java.util.Comparator
L’interfaccia java.lang.comparable di solito si utilizza per definire l’ordinamento “naturale” di un oggetto e consta di un metodo con firma
int compareTo(T o)
che paragona l’oggetto corrente (this) con l’oggetto fornito in input al metodo (o).
Il risultato sarà:
- un intero positivo se this>o
- 0 se sono uguali
- un intero negativo se this<0
Vediamo un esempio
|
L’ordinamento definito è sul cognome; si noti che utilizziamo il metodo compareTo dell’oggetto String che di default ordina in modo alfabetico crescente (A-Z).
L’interfaccia java.util.Comparator si utilizza invece quando si vogliono definire ordinamenti alternativi dell’oggetto.
Si crea dunque una classe a parte che implementa l’interfaccia con il seguente metodo:
public int compare(T a,T b);
Il risultato sarà:
- un intero positivo se a>b
- 0 se sono uguali
- un intero negativo se a<b
Vediamo un comparator che ordini le persone per età:
|
A questo punto vediamo il risultato eseguendo il seguente main; procederemo prima alla stampa dei record così come sono inseriti, poi ordinandoli per ordinamento naturale ed infine per età.
|
L’output prodotto dalle 3 liste sarà:
|