Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339

    Implementazione di un comparatore

    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:
    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);
    }
    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.

    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:
    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);
    }
    E' giusto??

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    sbagliatissimo......
    perchè fai una classe astratta che implementa una interfaccia non fai l'ovveride di tutti i metodi (e questo è già un errore in fase di compilazione) e non ci metti neanche un metodo astratto. Mi spiace ma tutto questo (non entro nel merito della logica di funzionamento perchè non ci sono stato dietro) è sbagliatissimo

  3. #3

    Re: Implementazione di un comparatore

    Originariamente inviato da Markus85
    Progettare una classe astratta ContenitoreAstratto che implementa l'interfaccia contenitore e fornisca una concretizzazione di quanti più metodi è possibile.
    Ok, ma devi definire in modo completo lo stato di questo ContenitoreAstratto altrimenti così puoi concretizzare un solo metodo, inoltre poichè stai implementando una interfaccia devi riportare all'interno di questa classe tutti i suoi metodi.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Che intendi per definire in modo completo lo stato di contenitore astratto?
    potresti postarmi il codice corretto?

    Si hai ragione i metodi dell'interfaccia devo riportarli tutti.
    Nel post ne ho messi solo due per non allungare troppo il brodo

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Ah un'altra cosa.
    i due metodi getComparator e setComparatorAndSort sono giusti?

  6. #6
    Originariamente inviato da Markus85
    i due metodi getComparator e setComparatorAndSort sono giusti?
    Il getComparator deve restituire il valore del campo di istanza comparator:
    codice:
    public Comparator<T> getComparator(){
          return this.comparator;
    }
    Invece il metodo setComparatorAndSort non può essere corretto anche per il discorso che facevo prima, cioè questo ContenitoreAstratto come deve essere rappresentato?
    Devi salvare da qualche parte gli elementi inseriti. Spero di essermi spiegato.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.