8
votes

Comment trier un hashtable Java?

J'ai inséré certaines données dans une hache Java. Si je lisais les données de la haquetable, il ne revient pas dans le même ordre que je l'ai inséré. Comment puis-je obtenir les données commandées de la haquetable?

J'utilise le code suivant pour obtenir les valeurs de la haquetable: xxx


1 commentaires

N'utilisez pas de vecteur, d'énumération ou de hashtable. Ils sont anciens et doivent être évités. Info: Stackoverflow.com/Questtions/453684/... Stackoverflow.com/questions/2601602/... Stackoverflow.com/questions/2873254/...


6 Réponses :


22
votes

Si vous voulez une carte de préservation de commande, vous devez utiliser linkedhashmap :

Tableau de hachage et mise en œuvre de la liste liée de l'interface de la carte, avec ordre d'itération prévisible. Cette implémentation diffère de HASHMAP en ce sens qu'elle conserve une liste doublement liée à travers toutes ses entrées. Cette liste liée définit l'ordre d'itération, qui est normalement l'ordre dans lequel des clés ont été insérées dans la carte (ordre d'insertion). Notez que l'ordre d'insertion n'est pas affecté si une clé est réacheminée dans la carte. (Une clé k est réinsérée dans une carte m si m.put (k, v) est invoqué lorsque m.containskey ( k) retournerait vrai immédiatement avant l'invocation.)

Cette implémentation épargnait ses clients de l'ordre indéterminé, généralement chaotique fourni par hashmap (et hashtable ), sans encourir le coût accru associé à Treeemap .

Notez que cela est généralement comparé à hashmap plutôt que HASHTABLE - Je ne connais pas d'un ordre de conservation de la commande d'équivalent à HASHTABLE ; Ce dernier n'est généralement pas utilisé ces jours-ci de toute façon (juste comme ArrayList est généralement utilisé de préférence à vecteur ).

J'ai supposé que vous voulez insertion commande plutôt que triés de clé ordre. Si vous voulez ce dernier, utilisez Treemap .


1 commentaires

@Tester: Vous voudrez probablement "accepter" une réponse, si ça va pour vous :)



0
votes

Si je lis les données de la table de hachage Ça ne vient pas dans le même ordre quoi J'ai inséré.

Votre question n'a pas de sens. Une hache ne dispose pas d'une "commande", il est inadapté (modifier: certaines implémentations ont une commande, mais ce n'est pas courant pour une haquetable) ..

Dans quel ordre attendriez-vous que les entrées soient?

Si vous souhaitez stocker des éléments dans un certain ordre, vous devez utiliser une liste (par exemple une sous-classe de Java.Util.list).

et BTW, votre échantillon de code ne contient même pas de table de hachage.


0 commentaires

3
votes

Utilisez Treemap pour le tri:

Map<String, String> yourMap = new HashMap<String, String>();
    yourMap.put("1", "one");
    yourMap.put("2", "two");
    yourMap.put("3", "three");

Map<String, String> sortedMap = new TreeMap<String, String>(yourMap);


1 commentaires

Cela ne donnera pas insertion ordre cependant.



7
votes

A HASHTABLE n'a pas d'ordre d'itération prévisible et ne peut pas être trié. Si vous voulez seulement une commande d'itération prévisible, vous devez utiliser un LinkedHashMap . Si vous souhaitez pouvoir trier votre carte , vous devez utiliser un Treemap .


0 commentaires

6
votes

Hashtable est une collection héritée remplacée par Java 1.2 Collections en 1998. Je vous suggère d'éviter cela, avec vecteur et énumération .

au lieu de HASHTABLE Utilisez HASHMAP dans la mesure du possible. Vous pouvez ajouter une synchronisation en utilisant collections.synchronizedMap (carte) si vous en avez besoin.

au lieu de vecteur , utilisez ArrayList dans la mesure du possible. Vous pouvez ajouter une synchronisation à l'aide de collections.synchronizedlist (carte) si vous en avez besoin.

au lieu de énumération Vous pouvez utiliser itérateur ou même un pour chacun boucle


2 commentaires

Que voudriez-vous utiliser à la place?


Exemple peut être trouvé à lien



7
votes

Bien qu'un hashtable ne puisse pas être trié, il a demandé comment obtenir des données triées, qui peut être effectuée trier la liste des touches extraites à partir du HASHTABLE et de récupérer des valeurs dans cette ordre. Quelque chose comme: xxx

ira bien.


0 commentaires