Originariamente inviato da citrus
scusa non ho capito una cosa...
quando dici che l'hashmap non è ordinato...
significa che mantiene l'ordine con cui l'ho popolato o che le chiavi si mischiano automaticamente secondo una logica a noi sconosciuta?
Non c'è alcun ordine preciso, nel senso che le chiavi sono completamente disordinate, non c'è alcuna logica precisa e per la iterazione delle chiavi si ottiene un ordine assolutamente imprevedibile. E che come ho già detto, può anche cambiare dopo inserimenti/eliminazioni.
Per capire questa cosa dovresti capire come è gestita una "hash table", c'è una lista di "bucket" e la scelta del bucket da usare è fatta tramite il metodo hashCode implementato dall'oggetto.
Comunque prova questo:
codice:
import java.util.*;
public class Prova
{
public static void main (String[] args)
{
Map<String,Integer> map = new HashMap<String,Integer> ();
map.put ("uno", 1);
map.put ("due", 2);
map.put ("tre", 3);
for (Map.Entry<String,Integer> e : map.entrySet ())
System.out.println (e.getKey () + " -> " + e.getValue ());
map.put ("quattro", 4);
map.put ("cinque", 5);
map.put ("sei", 6);
System.out.println ("-----");
for (Map.Entry<String,Integer> e : map.entrySet ())
System.out.println (e.getKey () + " -> " + e.getValue ());
}
}
Output (qui sul mio PC):
codice:
tre -> 3
due -> 2
uno -> 1
-----
sei -> 6
tre -> 3
quattro -> 4
cinque -> 5
due -> 2
uno -> 1
L'ordine è assolutamente imprevedibile e come vedi ... cambia pure!!
Ora nella prima riga del main, prova a mettere new TreeMap invece di new HashMap e rilancia il programma:
codice:
due -> 2
tre -> 3
uno -> 1
-----
cinque -> 5
due -> 2
quattro -> 4
sei -> 6
tre -> 3
uno -> 1
Ora le chiavi sono perfettamente ordinate secondo l'ordine alfabetico.
Originariamente inviato da citrus
perchè se è così allora credo che la soluzione migliore sia quella si usare il LinkedHashMap come dicevi tu...
Se ti interessa l'ordine di inserimento allora sì, come scelta è ok.