collection e comparable(3)
TRANSCRIPT
Lezione sulle collection e l’ interfaccia comparable
Collection e comparable
Antonio Emanuele Cinà854866
ComparableRappresenta tutti gli oggetti sui quali è definito un ordinamento totale.
Comparable è un' interfaccia generica, ciò significa che ha un tipo generico T
public class Studente implements Comparable<Studente> {
}
Abbiamo cosi definito una classe Studente i quali oggetti possono essere disposti secondo un ordine prestabilito.
ComparableL’ interfaccia Comparable richiede di implementare il metodo compareTo.
Firma: public int compareTo( T obj)
Dove T rappresenta il tipo generico che abbiamo passato come parametro.
Il metodo compareTo ritorna un intero :
● 0 , se i due elementi hanno stessa proprietà di ordinamento● >0 , se l’ oggetto su cui ho richiamato la compare è più grande● <0 , se l’oggetto passato come parametro è più grande
Comparable & TreeSetChe utilità può avere implementare l’ interfaccia Comparable?
Implementando l’ interfaccia Comparable possiamo usufruire della collection TreeSet.
TreeSet è una Collection che implementa l’ interfaccia Set e possiede due caratteristiche importanti:
● Gli oggetti interni ad una TreeSet sono unici● Gli oggetti interni ad una TreeSet sono disposti in modo ordinato
TreeSetI metodi (principali) che ci mette a disposizione la classe TreeSet per gestire la collection sono:
● boolean add (T obj)● boolean remove (Object obj)● boolean contains (Object obj)● Iterator iterator ()● boolean isEmpty ()● int size ()● void clear()
Un po' di codiceSupponiamo di voler creare una classe Classe per poter gestire gli studenti di una classe scolastica. (vogliamo poter memorizzare gli studenti tenendo conto le loro matricole)
Errore di codiceCosa sarebbe successo se sugli studenti non avessi prestabilito un ordine?
Errore di compilazione?
NO, per il compilatore non c’è alcun problema.
ComparatorUn’ altra soluzione per dichiarare un ordinamento era di utilizzare un oggetto Comparator.
L’ interfaccia Comparator è un interfaccia generica
public class MioComparatore implements Comparator<Studente> {
}
MioComparatore è una classe che si occuperà di definire un ordine per i miei oggetti.
ComparatorL’ interfaccia comparator richiede di implementare il metodo compare
Firma: public int compare( T obj1 , T obj2 )
Dove T indica il tipo parametrico passato nella dichiarazione dell’ oggetto.
Ritorna un intero che rappresenta :
● 0 , se i due elementi hanno stessa proprietà di ordinamento● >0 , se obj1 è più grande● <0 , se obj2 è più grande
UtilitàSupponiamo di voler usare le stesse classi Studenti e Classe ma di voler creare un ordinamento in base alla media degli studenti e non in base alle loro matricole.
Abbiamo due soluzioni:
● Riscriviamo il metodo compareTo della classe Studente, ma a questo punto dovremmo farlo ogni qualvolta che vogliamo cambiare ordinamento.
● Usare un oggetto comparator e tenerci più ordinamenti possibili
Un po’ di codiceLa classe TreeSet utilizzata da noi per gestirci la collezione di studenti in modo ordinato ci offre un costruttore che inizializza un comparatore per l’ insieme.
Costruttore con comparatore
Costruttore senza comparatore
Un po’ di codiceNella slide precedente abbiamo visto come usare un comparatore. Il problema però sta nel dover reinserire ogni elemento. Come si può risolvere?
Usando il metodo addAll della nostra TreeSet
Domande?
Contatti:[email protected] account [email protected] personale