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 carte
m code> si
m.put (k, v) code> est invoqué lorsque
m.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> (et
hashtable code>), sans encourir le coût accru associé à
Treeemap code>. p> blockQuote>
Notez que cela est généralement comparé à
hashmap code> plutôt que
HASHTABLE 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 comme
ArrayList 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/...