Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327

    [JAVA] HashMap Annidati

    Salve,
    ho l'esigenza di creare un albero di hashmap ad esempio

    codice:
    HashMap c = new HashMap();
    HashMap c2 = new HashMap();
    
    c2.put("Dipendente1", "Paperino");
    c2.put("Dipendente2", "Pluto");
    c2.put("Dipendente3", "Paperone");
    c2.put("Dipendente4", "Minni");
    c2.put("Dipendente5", "Topolino");
            
    c.put("Ragione Sociale", "Planet");
    c.put("Dipendenti", c2);
    in questo modo l'hashmap "c" contiene due valori, di cui il primo di tipo Stringa e il secondo un HashMap con annidati dei valori. la scelta dell'HashMap è ricaduta perchè mi permette di gestire Chiave/Valore.
    Come faccio a scorrere l'intero hashmap stampando tutti i valori persino quelli annidati?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Da Java 5 in avanti il compilatore si lamenterà per diversi warning: da Java 5, infatti, le HashMap dovrebbero essere tipizzate (e tu non lo fai).

    La tipizzazione, d'altro canto, ti costringerebbe a rivedere l'implementazione: non ti permette di inserire (a meno di "trucchetti") oggetti "a casaccio" (nel senso di oggetti non omogenei) all'interno delle collezioni. E del resto è quello che farei io: rivedrei un attimo la struttura.

    Comunque, se vuoi scorrere tutta la HashMap, compresa quella annidata, hai un solo modo per farlo: accorgerti che il valore di una data chiave è una HashMap e scorrere quest'ultima (magari in modo ricorsivo). Del resto, la struttura è, appunto, non omogenea, quindi ti devi "arrangiare":

    codice:
    public void stampaHashMapRicorsivo(HashMap hm) {
       // Ottengo l'elenco delle chiavi
       Set<String> keys = hm.keySet();
    
       // Lo scorro
       for(String key : keys) {
          // Per ciascuna chiave, recupero il valore
          Object val = hm.get( key );
    
          // Se il valore è una stringa, la stampo...
          if (val instanceof String) {
             System.out.println("Chiave: " + key + "; Valore: " + val);
          } else {
             // ... altrimenti, verifico se ho una HashMap da dover scorrere ricorsivamente
             if (val instanceof HashMap) {
                stampaHashMapRicorsivo((HashMap) val);
             } else {
                // Qui c'è qualcos'altro... gestiscilo
             }
          }
       }
    }
    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327
    grazie mille

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.