2011-09-06 4 views
2

Je crée une nouvelle carte et y insère des cordes (ce qui n'est pas grave) - mais j'ai remarqué que les chaînes sont en train d'être réorganisées en tant que carte grandit Est-il possible d'arrêter ce réordonnancement qui se produit de sorte que les éléments de la carte conservent l'ordre dans lequel ils ont été placés?Comment éviter la réorganisation des éléments lors de la mise en java HashMap

Map<String,String> x = new HashMap<String, String>(); 
x.put("a","b"); 
x.put("a","c"); 
x.put("a","d"); 

x.put("1","2"); 
x.put("1","3"); 
x.put("1","4"); 

//this shows them out of order sadly... 
for (Map.Entry<String, String> entry : x.entrySet()) { 
    System.out.println("IN THIS ORDER ... " + entry.getValue()); 
} 
+2

Si ce n'est pas trié, il ne peut pas être un hashmap, vraiment ... – tdammers

+0

@tdammers - hein? Pourriez-vous m'expliquer cela? –

+0

Si elle triait ses pas une carte de hachage serait plus précise. Un hachage des entrées de lieux de carte est un motif aléatoire. LinkedHashMap cache cela en se souvenant aussi de l'ordre dans lequel vous les avez ajoutés ou de l'ordre dans lequel ils ont été utilisés pour la dernière fois. Cependant, ils seront toujours placés dans un ordre aléatoire dans son magasin sous-jacent. –

Répondre

12

Si vous vous souciez de commande, vous pouvez utiliser un SortedMap. La classe réelle qui implémente l'interface (au moins pour la plupart des scénarios) est TreeMap. Alternativement, LinkedHashMap maintient également sa commande, tout en utilisant toujours un conteneur basé sur la table de hachage.

+2

Notez que l'ajout de '7' à une recherche de JavaDoc d'une classe aboutit généralement à un lien pointant directement vers les * derniers * docs. –

5

Vous pouvez le conserver avec LinkedHashMap.

5

Un HashMap dans Java n'est pas trié http://download.oracle.com/javase/1,5.0/docs/api/java/util/HashMap.html. Si vous voulez l'ordre d'itération prévisible utiliser un LinkedHashMap à la place: http://download.oracle.com/javase/1.4.2/docs/api/java/util/LinkedHashMap.html

Heres une bonne discussion sur la différence: How is the implementation of LinkedHashMap different from HashMap?

+0

Notez que l'ajout de '7' à une recherche de JavaDoc d'une classe se traduira généralement par un lien pointant directement vers les * derniers * docs. –

4

Les réponses précédentes sont correctes dans ce que vous devez utiliser une implémentation de Map qui maintient la commande. LinkedHashMap et SortedMap font chacun ces choses. Toutefois, le point à retenir est que toutes les collections ne conservent pas l'ordre et si l'ordre est important pour vous, vous devez choisir l'implémentation appropriée. Les HashMaps génériques ne maintiennent pas l'ordre, ne prétendent pas le faire et ne peuvent pas être configurés pour le faire.

Questions connexes