Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]dubbio Comparable e Comparator

    Ciao ho un dubbio su Comparable e Comparator.
    Allora Comparable effettua un ordinamento naturale tra l'oggetto che esegue il metodo e quello specificato dall'argomento mentre Comparator effettua solo un ordinamento totale.Qui sorge il dubbio:Comparable non può effettuare un ordinamento naturale su oggetti di tipo int?Cioè se ho:

    codice:
    class Libro1 implements Comparable<Libro1> {
        private String titolo;
        private int annoPubblicazione;
    
        public Libro1(String titolo, int annoPubblicazione) {
            this.titolo = titolo;
            this.annoPubblicazione = annoPubblicazione;
        }
    
        public String getTitolo() {
            return titolo;
        }
    
        public int getAnnoPubblicazione() {
            return annoPubblicazione;
        }
    
        public String toString() {
            return titolo + ", " + annoPubblicazione;
        }
    
        public int compareTo(Libro1 altroLibro) {
           
            return getAnnoPubblicazione().compareTo(altroLibro.getAnnoPubblicazione());
            
        }
    }
    Il compilatore non riconosce l'int;quindi con Comparable posso usare solo tipi riferimento(es:String),mentre con Comparator solo tipi primitivi(es:int)?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Certo che può... ma int è un tipo di dato primitivo, non un oggetto... pertanto non possiede alcun metodo (quindi non possiede il metodo compareTo() ). Devi forzare un cast a Integer (ed il compilatore si occuperà automaticamente dell'auto-boxing):

    codice:
    public int compareTo(Libro1 altroLibro) {
       Integer val = annoPubblicazione;   // Auto-boxing
       return val.compareTo( altroLibro.getAnnoPubblicazione() );
    }

    In questo esempio si fa uso (per ben due volte) dell'auto-boxing introdotto da Java 5.


    Se non vuoi scomodare i meccanismi di auto-boxing:

    codice:
    public int compareTo(Libro1 altroLibro) {
       return (annoPubblicazione<altroLibro.getAnnoPubblicazione() ? -1 :
              (annoPubblicazione==altroLibro.getAnnoPubblicazione() ? 0 : 1));
    }

    Ciao.
    Ultima modifica di LeleFT; 10-04-2015 a 13:42
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    E io aggiungo (oltre a quanto detto correttamente da LeleFT): da Java 7 sono stati aggiunti metodi come es. in Integer:

    public static int compare(int x, int y)

    (idem per Short, Long, ecc...)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    Ciao grazie 1000 sei stato chiarissimo

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.