Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104

    [JAVA] Ordinamento ArrayList

    Salve a tutti! Ho un problema con l'ordinamento (che sia crescente o decrescente al momento poco mi interessa) di un ArrayList.
    Ho provato implementando l'interfaccia Comparable, non riesco (probabilmente sbaglierò qualcosa boh)
    Vi posto il codice delle classi..

    codice:
    public class Invitato extends Persona {    
        private int id;
        private String tipo;
    
    
        public Invitato(String cognome, String nome, String sesso, int eta, int id, String tipo) {
            super(cognome, nome, sesso, eta);
            this.id = id;
            this.tipo = tipo;
        }
        
        public void setID(int id) {
            this.id = id;
        }
    
    
        public void setTipo(String tipo) {
            this.tipo = tipo;
        }
        
        public int getID() {
            return id;
        }
    
    
        public String getTipo() {
            return tipo;
        } 
    }
    codice:
     public class ElencoRegali extends ArrayList<Regalo> {    
           /** metodo per l'inserimento dei regali */
        public void addRegalo(String tipo, float prezzo, String info) {
            Regalo re = new Regalo(tipo, prezzo, info);
            this.add(re);
        }
        
        public void setTipo(String tipo, int i){
            Regalo temp;
            temp = (Regalo) this.get(i);
            temp.setTipo(tipo);        
        } 
    
    
        public void setPrezzo(float prezzo, int i){
            Regalo temp;
            temp = (Regalo) this.get(i);
            temp.setPrezzo(prezzo);        
        } 
        
        public void setInfo(String info, int i){
            Regalo temp;
            temp = (Regalo) this.get(i);
            temp.setInfo(info);        
        }
        
        public String getTipo(int i){
            Regalo temp;
            temp = (Regalo) this.get(i);
            return temp.getTipo();
        }
        
        public float getPrezzo(int i){
            Regalo temp;
            temp = (Regalo) this.get(i);
            return temp.getPrezzo();
        }
        
        public String getInfo(int i){
            Regalo temp;
            temp = (Regalo) this.get(i);
            return temp.getInfo();
        }
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    Salve a tutti! Ho un problema con l'ordinamento (che sia crescente o decrescente al momento poco mi interessa) di un ArrayList.
    Ho provato implementando l'interfaccia Comparable, non riesco (probabilmente sbaglierò qualcosa boh)
    Vi posto il codice delle classi..
    E dove è Comparable e la relativa implementazione? E cosa usi per l'ordinamento? (immagini Collections.sort ma non l'hai detto)


    P.S. quando si fa una classe come la tua ElencoRegali che rappresenta una collezione ma al cui interno hai tanti set/get per settare/leggere un attributo di un elemento i-esimo, questo generalmente non è una bella/buona cosa. Perché vuol dire che la tua classe ha più di una responsabilità. I cast espliciti a (Regalo) tra l'altro non servirebbero neanche.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    E come dovrei implementare la collezione?
    cmq si usavo collections.. ora non c'è nulla perché ho cancellato in quanto non funzionava

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    cmq si usavo collections.. ora non c'è nulla perché ho cancellato in quanto non funzionava
    Ecco... invece di cancellarlo, perchè non lo hai postato dicendo che non funzionava, così magari avremmo potuto correggere la parte che "non funzionava"?


    Ciao.
    "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

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Parentesi, perché ElencoRegali è una classe? Cosa aggiunge ad ArrayList? Nulla...

    codice:
    ArrayList<Regalo> elencoRegali = new ArrayList<Regalo>();
    elencoRegali.add(new Regalo(...));
    ...
    Regalo r = elencoRegali.get(i);
    r.setPrezzo(20);
    ...
    ecc
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Ecco... invece di cancellarlo, perchè non lo hai postato dicendo che non funzionava, così magari avremmo potuto correggere la parte che "non funzionava"?


    Ciao.

    codice:
    public class ElencoRegali extends ArrayList<Regalo> implements Comparable<Regalo> {    
           /** metodo per l'inserimento dei regali */
        public void addRegalo(String tipo, float prezzo, String info) {
            Regalo re = new Regalo(tipo, prezzo, info);
            this.add(re);
        }
        
        public void setTipo(String tipo, int i){
            Regalo temp;
            temp = (Regalo) this.get(i);
            temp.setTipo(tipo);        
        } 
    
    
        public void setPrezzo(float prezzo, int i){
            Regalo temp;
            temp = (Regalo) this.get(i);
            temp.setPrezzo(prezzo);        
        } 
        
        public void setInfo(String info, int i){
            Regalo temp;
            temp = (Regalo) this.get(i);
            temp.setInfo(info);        
        }
        
        public String getTipo(int i){
            Regalo temp;
            temp = (Regalo) this.get(i);
            return temp.getTipo();
        }
        
        public float getPrezzo(int i){
            Regalo temp;
            temp = (Regalo) this.get(i);
            return temp.getPrezzo();
        }
        
        public String getInfo(int i){
            Regalo temp;
            temp = (Regalo) this.get(i);
            return temp.getInfo();
        }
        
        public int compareTo(Regalo r, int i) {
            return Float.compare(r.getPrezzo(), this.getPrezzo(i));
        }
    
    
        @Override
        public int compareTo(Regalo t) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    }

    L'ultimo metodo lo inserisce netbeans

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    codice:
    public class ElencoRegali extends ArrayList<Regalo> implements Comparable<Regalo> {
    No, comunque così ha poco senso. Non devi comparare-ordinare N liste tra di loro .... ma N oggetti Regalo tra di loro!!
    Anche se l'obiettivo fosse di comparare N liste (cosa che non so quanto servirebbe), non sarebbe comunque corretto.

    Quindi implements Comparable<Regalo> va nella classe Regalo .... non su un qualcosa che è una lista di oggetti Regalo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Ehm... Comparable deve essere implementato dalla classe che rappresenta gli oggetti da ordinare, non dal "contenitore".

    Se a te interessa ordinare i regali, è Regalo che deve implementare Comparable (perchè è ciascun oggetto Regalo che deve essere comparato con gli altri oggetti Regalo). E' la classe Regalo che sa come comparare le istanze di sé stessa.

    Così facendo, stai dicendo che ciascuna lista di regali può essere comparata con altre liste di regali (cioè, stai dicendo che i contenitori possono essere comparati fra di loro) e, oltretutto, in modo sbagliato.


    Ciao.
    "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

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    104
    ok sono confusa.. la spiegazione l'ho capita, ma io devo ordinare l'array.. in più il metodo Collections.sort() richiede obbligatoriamente come parametro una lista.. ma non accetta l'arraylist

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da LuLyLuNa Visualizza il messaggio
    ok sono confusa.. la spiegazione l'ho capita, ma io devo ordinare l'array..
    E fin qui, mi pare ovvio... un array (un ArrayList) è una "collezione" di oggetti... ciascun oggetto (contenuto nell'array) sa come compararsi agli altri.

    in più il metodo Collections.sort() richiede obbligatoriamente come parametro una lista.. ma non accetta l'arraylist
    E anche qui mi pare ovvio... se devi ordinare una collezione di oggetti, al metodo sort() passerai la collezione di oggetti da ordinare... cioè la lista.

    Nota però che il metodo sort() accetta una lista di oggetti comparabili, non una lista comparabile: ciò che può essere comparato è il contenuto (l'oggetto), non il contenitore (la lista). Quindi, Comparable va implementata dalla classe Regalo... perchè sono i Regali che possono essere comparati tra di loro.

    Fatto questo, al metodo sort() potrai passare un ArrayList di oggetti Regalo ( ArrayList<Regalo> ), ed il metodo li ordinerà secondo l'ordinamento "naturale", imposto dall'interfaccia Comparable.

    Il primo passo, quindi, è implementare Comparable nella classe Regalo... fallo e posta la classe, così vediamo se l'hai implementata correttamente (è la parte più importante e "ostica").


    Ciao.
    Ultima modifica di LeleFT; 04-06-2014 a 13:31
    "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

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.