Ciao Ragazzi.
Mi è stato spiegato in una discussione precendente come implementare un comparatore in una interfaccia.
Buttate un occhiata al codice per vedere se è giusto.
Prima la "traccia":
Sia data la seguente interfaccia:
Un’istanza di Contenitore memorizza al suo interno un insieme di elementi, di tipo generico T, mantenendoli ordinati secondo il criterio stabilito da un apposito oggetto, di tipo Comparator<T>, ricevuto come parametro del proprio costruttore.codice:public interface Contenitore<T> extends Iterable<T>{ Comparator<T> getComparator(); void setComparatorAndSort(Comparator<T> c); int size(); void inserisci(T elem); boolean rimuovi(T elem); boolean rimuovi(Contenitore<T> l); void aggiungi(Contenitore<T> l); }
Il metodo getComparator() restituisce l’oggetto Comparator utilizzato per ordinare gli elementi contenuti.
Il metodo setComparatorAndSort() consente di cambiare il criterio di ordinamento specificando un nuovo oggetto Comparator. E’ responsabilità del metodo riordinare gli elementi contenuti in accordo al nuovo criterio.
Progettare una classe astratta ContenitoreAstratto che implementa l'interfaccia contenitore e fornisca una concretizzazione di quanti più metodi è possibile.
Io ho fatto cosi:
E' giusto??codice:public abstract class ContenitoreAstratto<T> implements Contenitore<T>{ private Comparator<T> comparator; public ContenitoreAstratto(Comparator<T> c){ comparator = c; } @Override public Comparator<T> getComparator(){ return new Comparator<T>(); } @Override public void setComparatorAndSort(Comparator<T> c){ Iterator<T> it = this.iterator(); LinkedList<T> ll = new LInkedList<T>(); while(it.hasNext()){ T e = it.next(); ll.add(e); } Collections.sort(LinkedList<T> ll, Comparator<T> c); Iterator<T> itl = ll.iterator(); while(itl.hasNext()){ T e = itl.next(); this.inserisci(e); }

Rispondi quotando
