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: p>
6 Réponses :
Si vous voulez une carte de préservation de commande, vous devez utiliser linkedhashmap code> : p>
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 code> est réinsérée dans une cartem code> sim.put (k, v) code> est invoqué lorsquem.containskey ( k) code> retournerait vrai immédiatement avant l'invocation.) p>Cette implémentation épargnait ses clients de l'ordre indéterminé, généralement chaotique fourni par
hashmap code> (ethashtable code>), sans encourir le coût accru associé àTreeemap code>. p> blockQuote>Notez que cela est généralement comparé à
hashmap code> plutôt queHASHTABLE code> - Je ne connais pas d'un ordre de conservation de la commande d'équivalent àHASHTABLE code>; Ce dernier n'est généralement pas utilisé ces jours-ci de toute façon (juste commeArrayList code> est généralement utilisé de préférence àvecteur code>). p>J'ai supposé que vous voulez insertion em> commande plutôt que triés de clé em> ordre. Si vous voulez ce dernier, utilisez
Treemap code>. p>
@Tester: Vous voudrez probablement "accepter" une réponse, si ça va pour vous :)
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é. p> blockQuote>
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) .. p>
Dans quel ordre attendriez-vous que les entrées soient? p>
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). P>
et BTW, votre échantillon de code ne contient même pas de table de hachage. p>
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);
Cela ne donnera pas insertion i> ordre cependant.
A HASHTABLE code> 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 code> . Si vous souhaitez pouvoir trier votre carte code>, vous devez utiliser un Treemap code> . P>
au lieu de au lieu de au lieu de Hashtable code> est une collection héritée remplacée par Java 1.2 Collections en 1998. Je vous suggère d'éviter cela, avec vecteur code> et énumération code> . P>
HASHTABLE code> Utilisez HASHMAP code> dans la mesure du possible. Vous pouvez ajouter une synchronisation en utilisant collections.synchronizedMap (carte) code> si vous en avez besoin. P>
vecteur code>, utilisez ArrayList code> dans la mesure du possible. Vous pouvez ajouter une synchronisation à l'aide de collections.synchronizedlist (carte) code> si vous en avez besoin. P>
énumération code> Vous pouvez utiliser itérateur code> ou même un pour chacun code> boucle p>
Bien qu'un ira bien. P> p> hashtable code> 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 code> HASHTABLE code> et de récupérer des valeurs dans cette ordre.
Quelque chose comme:
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/...