Comparator e comparable

di il
1 risposte

Comparator e comparable

Sono alle prese con queste due interfacce. Ho trovato alcuni esempi in rete ma ancora non mi è tanto chiaro il loro utilizzo, qualcuno potrebbe farmi due semplici esempi e spiegarmi le differenze? Grazie.

1 Risposte

  • Re: Comparator e comparable

    mark9 ha scritto:


    Sono alle prese con queste due interfacce. Ho trovato alcuni esempi in rete ma ancora non mi è tanto chiaro il loro utilizzo, qualcuno potrebbe farmi due semplici esempi e spiegarmi le differenze?
    Le due interfacce hanno il metodo di comparazione che è un po' diverso come forma. Ma la differenza più importante è relativa a DOVE devono essere implementate.

    Comparable va implementato nella classe degli oggetti da comparare. Se hai una classe es. Persona e vuoi che sia Comparable, allora si fa:
    public class Persona implements Comparable<Persona> {
        // ....
    
        public int compareTo(Persona altraPersona) {
            // .....
        }
    }
    Dal momento che Comparable è in Persona, se ne può avere uno solo di Comparable. Questo è il criterio di ordinamente che dovrebbe essere quello "naturale" degli oggetti. Per oggetti Persona il criterio più noto e naturale è per cognome e poi per nome.

    Comparator va implementato in classi esterne e pertanto ne puoi avere quante ne vuoi per definire qualunque altro criterio particolare.
    public class NomeAnnoNascitaPersonaComparator implements Comparator<Persona> {
        public int compare(Persona persona1, Persona persona2) {
            // ....
        }
    }
    public class AnnoNascitaSessoPersonaComparator implements Comparator<Persona> { ...... }
    ecc...

    Poi quando vuoi ordinare una lista di Persona:

    Collections.sort(listaPersone); // usa implicitamente Comparable degli oggetti stessi

    Collections.sort(listaPersone, unTuoComparator); // usa un Comparator esplicito

    (da Java 8 le liste hanno il sort() che riceve un Comparator)
Devi accedere o registrarti per scrivere nel forum
1 risposte