Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    49

    [Java]Chiarimento su HashMap e values()

    Ho una HashMap contente oggetti di una classe creata da me, con alcuni campi string, altri campi altri oggetti appartenenti a classi create da me e un campo int. Il campo chiave è un campo stringa.
    Devo creare un metodo che restituisca una collezione degli oggetti contenuti nella mappa ordinati secondo il campo int.

    Questa dovrebbe essere la soluzione:

    Codice PHP:
    public Collection getOrdinati(){
       
    LinkedList ll = new LinkedList(elementi.values());
       
    Collections.sort(ll);
       return 
    ll;

    elementi è l'hashmap.
    Vorrei sapere secondo cosa viene ordinata la linkedlist ll.
    Se ci fossero più campi int negli oggetti contenuti nella hashmap come potrei ordinare secondo uno dei due?
    grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java]Chiarimento su HashMap e values()

    Originariamente inviato da xglobusx
    Codice PHP:
    public Collection getOrdinati(){
       
    LinkedList ll = new LinkedList(elementi.values());
       
    Collections.sort(ll);
       return 
    ll;

    elementi è l'hashmap.
    Vorrei sapere secondo cosa viene ordinata la linkedlist ll.
    Quindi i valori nella HashMap sono di tipi (classi) diversi??? Non potrà mai funzionare, ti becchi a runtime un ClassCastException!!
    Per poter ordinare una List, gli elementi devono essere comparabili (con Comparable o un Comparator, a seconda del metodo sort() che usi) ma, cosa molto più importante, tutti gli elementi devono essere "mutually comparable".
    In pratica non puoi comparare patate con carote .....
    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 L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    credo che la sua HashMap sia del tipo HashMap<String, Pippo>, dove "Pippo" e' una classe scritta da lui che ha diverse proprieta', tra le quali un paio di campi di tipo int, e vuole ordinare secondo quelli. Almeno, cosi' ho capito io.

    Quindi, dovresti scrivere un Comparator, ossia una classe che implementa appunto l'interfaccia java.util.Comparator. E' molto semplice, faccio un esempio:

    codice:
    public class PippoByPaperinoAscComparator implements Comparator<Pippo> {
    
        public int compare(Pippo o1, Pippo o2) {
            return (o1 == o2 ? 0 : o1 == null ? 1 : o2 == null ? -1 :
               Integer.valueOf(o1.getPaperino()).compareTo(Integer.valueOf(o2.getPaperino())));
        }
    
    }
    poi lo usi per ordinare gli elementi:
    codice:
    Collections.sort(ll, new PippoByPaperinoAscComparator);
    ed ecco che hai i tuoi elementi in ordine ascendente secondo la tua proprieta' int chiamata "Paperino"

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    49
    l'hashmap contiene elementi appartenenti tutti alla stessa classe costruita ad esempio così:

    public class Elemento{
    private String codice;
    private String nome;
    private Categoria nomeCategoria;
    private int esemplari;
    }

    l'hashmap è dichiarata in un'altra classe così:
    private Map elementi = new HashMap();

    poi viene riempita..

    Volevo sapere come fa il metodo che ho postato prima a restituire una linked list ordinata secondo esemplari.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da nether
    credo che la sua HashMap sia del tipo HashMap<String, Pippo>, dove "Pippo" e' una classe scritta da lui che ha diverse proprieta', tra le quali un paio di campi di tipo int, e vuole ordinare secondo quelli. Almeno, cosi' ho capito io.
    Ok, ho riletto bene (e non di fretta) .... avevo capito male io. Se contiene 1 solo tipo di oggetto allora è ok. Basta appunto usare Comparator.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    49
    ho capito. devo scrivere un comparator da usare su ll. grazie

    quindi Collections.sort(ll); secondo che campo ordina?

  7. #7
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    quindi Collections.sort(ll); secondo che campo ordina?
    secondo "l'ordinamento naturale degli elementi" credo... non ho idea da cosa sia determinato

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    49
    può essere che se c'è un solo campo int ordina secondo quello e se ce ne sono due o più bisogna fare il comparator?
    cmq grazie ll è ordinata.

  9. #9
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    può essere che se c'è un solo campo int ordina secondo quello e se ce ne sono due o più bisogna fare il comparator?
    No, secondo me questo non ha senso come criterio generale, non vedo una ragione per la quale l'ordinamento debba essere decretato per default da una proprieta' int di una classe.
    Cmq ripeto, non so quale criterio viene seguito per l'ordinamento di default, se ti serve saperlo prova una ricerca su google

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da nether
    secondo "l'ordinamento naturale degli elementi" credo... non ho idea da cosa sia determinato
    Esistono 2 interfacce: Comparable e Comparator.

    Comparable: è implementato nella classe che definisce l'oggetto da comparare quindi in questo modo ci può essere 1 solo modo di ordinamento, definito appunto "naturale".

    Comparator: è implementato da altre classi accessorie esterne alla classe dell'oggetto da comparare, pertanto ci possono essere N modi di ordinamento.
    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.