2013-08-11 6 views
7

Quindi ho creato una hashmap, ma ho bisogno di ottenere la prima chiave che ho inserito. Questo è il codice che sto utilizzando:Per prima cosa, la prima cosa in HashMap?

Primo:

public static Map<String, Inventory> banks = new HashMap<String, Inventory>(); 

Secondo:

for(int i = 0; i < banks.size(); i++) { 
    InventoryManager.saveToYaml(banks.get(i), size, //GET HERE); 
} 

Dove dice // ARRIVARE voglio ottenere la stringa dal hasmap. Grazie per l'aiuto.

risposta

14

HashMap non gestisce l'ordine di inserimento delle chiavi.

LinkedHashMap deve essere utilizzato in quanto fornisce un ordine di iterazione prevedibile che è normalmente l'ordine in cui le chiavi sono state inserite nella mappa (ordine di inserimento).

È possibile utilizzare il metodo MapEntry per iterare su LinkedHashMap. Quindi ecco cosa devi fare nel tuo codice. In primo luogo modificare la mappa banche dal HashMap alla LinkedHashMap:

public static Map<String, Inventory> banks = new LinkedHashMap<String, Inventory>(); 

E poi semplicemente iterare in questo modo:

for (Map.Entry<String, Inventory> entry : banks.entrySet()) { 
    InventoryManager.saveToYaml(entry.getValue(), size, entry.getKey()); 
} 

Se avete solo bisogno il primo elemento del LinkedHashMap allora si può fare questo:

banks.entrySet().iterator().next(); 
+3

Questo non risponde alla domanda. – Bohemian

+0

@Bohemian Aggiornamento della risposta con ulteriori dettagli. –

+0

Hmmm, hai appena copiato la mia risposta. Il minimo che potresti fare è darmi credito ... –

6

Rispondendo alla domanda nel titolo: per ottenere la prima chiave che è stato inserito, fare questo:

public static Map<String, Inventory> banks 
    = new LinkedHashMap<String, Inventory>(); 

String firstKey = banks.keySet().iterator().next(); 

Si noti che è necessario utilizzare uno LinkedHashMap per mantenere lo stesso ordine di inserimento durante l'iterazione su una mappa. Per scorrere tutte le chiavi in ​​ordine, partendo dal primo, fai questo (e credo che questo sia quello che intendevi):

for (Map.Entry<String, Inventory> entry : banks.entrySet()) { 
    InventoryManager.saveToYaml(entry.getValue(), size, entry.getKey()); 
} 
Problemi correlati