collection e comparable(3)

18
Lezione sulle collection e l’ interfaccia comparable Collection e comparable Antonio Emanuele Cinà 854866

Upload: francesco

Post on 26-Jan-2016

213 views

Category:

Documents


1 download

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

Esempio Comparable

Decidiamo di voler creare un ordine sugli studenti basato sulla loro matricola

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)

Un po’ di codice

Errore di codiceCosa sarebbe successo se sugli studenti non avessi prestabilito un ordine?

Errore di compilazione?

NO, per il compilatore non c’è alcun problema.

Errore di codiceEd in fase di esecuzione?

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 codiceCostruiamo il nostro comparatore per la media.

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 codice

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