Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [JAVA] Quando viene invocato questo comparatore?

    Ciao a tutti ,

    in un'esercitazione sulla manipolazione di contenitori era presente il file ComparaBottoniPerDiametro.java, ma sinceramente non capisco quando viene utilizzato, perchè negli altri file del pacchetto bottoni non viene richiesto o fatto un ordinamento.

    Viene invocato "silenziosamente" quando ad es. inserisco degli oggetti Bottone dentro una lista, mappa, ecc.?

    Oppure come potrebbe essere richiamato? Ad es. così: Bottone.ComparaBottoniPerDiametro(b1,b2)?

    Grazie!
    Alessandro

    codice:
    package bottoni;
    
    import java.util.Comparator;
    
    public class ComparaBottoniPerDiametro implements Comparator<Bottone>
    {
        public int compare(Bottone b1, Bottone b2)
        {
            if (b1.diametro > b2.diametro)
            {
                return 1;
            }
        
            if (b1.diametro < b2.diametro)
            {
                return -1;
            }
        
            return 0;
        }
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da alemagno Visualizza il messaggio
    Viene invocato "silenziosamente" quando ad es. inserisco degli oggetti Bottone dentro una lista, mappa, ecc.?
    No, Comparator definisce un criterio di ordinamento che è esterno alla classe degli oggetti da comparare (nel tuo caso Bottone). Quindi non può certo essere usato "implicitamente".
    Comparable invece, che va implementato nella classe degli oggetti da comparare, definisce il criterio di ordinamento che dovrebbe essere quello "naturale" e può essere 1 solo. In questo caso l'uso è tipicamente implicito.

    Quote Originariamente inviata da alemagno Visualizza il messaggio
    Oppure come potrebbe essere richiamato? Ad es. così: Bottone.ComparaBottoniPerDiametro(b1,b2)?
    No, un Comparator lo puoi passare ad esempio al sort di Collections:

    public static <T> void sort(List<T> list, Comparator<? super T> c)

    oppure ad esempio al costruttore di TreeSet:

    public TreeSet(Comparator<? super E> comparator)

    Quindi in questi casi devi passare new ComparaBottoniPerDiametro() cioè passare semplicemente una istanza del comparatore.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2025 vBulletin Solutions, Inc. All rights reserved.