Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    69

    scorrere 2 volte una HashMap di HashMap

    allora, ho una HashMap così composta:
    HashMap <String, HashMap<String, Pippo>>
    dove Pippo è una classe. Io dovrei scorrere solo l'Hashmap più esterna. Così però sarebbe facile, potrei fare così:
    codice:
    Collection c = hMap.values(); 
    //obtain an Iterator for Collection 
    Iterator itr = c.iterator(); 
    //iterate through HashMap values iterator 
    while(itr.hasNext()) System.out.println(itr.next());
    Il problema è che per ogni elemento che scorro, devo scorrere di nuovo l'hashmap a partire da quel punto fino alla fine, per intenderci, se al posto della Hashmap avessi un vettore dovrei fare qualcosa come:
    codice:
     
    for (int k=0; k<vett.lenght; k++)
    {
    for (int j=k+1; j<vett.lenght; j++)
    {
    //...do stuff
    }
    }
    solo che questo purtroppo tramite il metodo che ho scritto all'inizio e tramite gli iteratori non si può fare. Ho provato anche a trasformare l'HashMap il collection e quindi in array, ma non si può fare per colpa dell'Hashmap più interno che non mi permette di fare il .toarray().


    Possibili soluzioni?

  2. #2
    le chiavi della hashmap sono un set (come puoi vedere da metodo keySet). Un set, come puoi vedere da questo link http://download.oracle.com/javase/6/...iterator%28%29 alla documentazione, non garantisce alcun ordine di iterazione (a meno che ciò non sia garantito in una particolare implementazione ) quindi non puoi fare affidamento sul fatto che due iteratori restituiscano gli elementi nello stesso ordine. Questo mi porta a dirti che per ottenere il tuo scopo hai per forza necessità di iterare una prima volta tutta la mappa memorizzando le chiavi ottenute in una qualche struttura dati che preservi l'ordine (un array, un'arraylist...), successivamente applichi il tuo algoritmo di visita su quella struttura dati. Ovviamente tutto ciò comporta un'iterazione in più sulla mappa, ma mi pare tu non abbia alternative.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    69
    Originariamente inviato da unomichisiada
    le chiavi della hashmap sono un set (come puoi vedere da metodo keySet). Un set, come puoi vedere da questo link http://download.oracle.com/javase/6/...iterator%28%29 alla documentazione, non garantisce alcun ordine di iterazione (a meno che ciò non sia garantito in una particolare implementazione ) quindi non puoi fare affidamento sul fatto che due iteratori restituiscano gli elementi nello stesso ordine. Questo mi porta a dirti che per ottenere il tuo scopo hai per forza necessità di iterare una prima volta tutta la mappa memorizzando le chiavi ottenute in una qualche struttura dati che preservi l'ordine (un array, un'arraylist...), successivamente applichi il tuo algoritmo di visita su quella struttura dati. Ovviamente tutto ciò comporta un'iterazione in più sulla mappa, ma mi pare tu non abbia alternative.
    perfetto grazie!
    supponevo anch'io che fosse l'unica soluzione possibile

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.