J'ai une hashtable. La méthode values () renvoie des valeurs dans un ordre différent de l'ordre dans lequel je suis inséré.Comment puis-je obtenir les valeurs dans le même ordre que j'ai inséré? L'utilisation de LinkedHashmap est une alternative mais elle n'est pas synchronisée.Comment garder l'ordre des éléments en hashtable
Répondre
Utilisez un LinkedHashMap
.
table de hachage et la liste liées la mise en œuvre de l'interface
Map
, avec ordre d'itération prévisible. Cette implémentation diffère deHashMap
par qu'elle maintient une liste à double liaison passant par toutes ses entrées. Cette liste chaînée définit l'ordre d'itération , qui est normalement l'ordre dans lequel les clés ont été insérées dans la carte (insertion-order). Notez que l'ordre d'insertion n'est pas affecté si une clé est réinsérée dans la carte. (A clé k est réinséré dans une carte m sim.put(k, v)
est appelé lorsquem.containsKey(k)
retourneraittrue
immédiatement avant l'invocation.)
combiné avec Collections.synchronizedMap()
.
Ainsi, par exemple:
Map<String, String> map = Collections.synchronizedMap(
new LinkedHashMap<String, String>());
Pour clarifier: Si je ne cherche pas à avoir plus de 1 pas d'accès à ce 'LinkedHashMap' à la fois, serait-il encore recommandé de le synchroniser? Ou le 'LinkedHashMap' sur son propre serait considéré assez? – blo0p3r
@ blo0p3r Le 'LinedHashMap' devrait suffire à lui seul. –
Une table de hachage est intrinsèquement non ordonnée, vous utilisez donc une structure de données incorrecte. Puisque vous ne spécifiez pas la langue que vous utilisez, je ne peux pas suggérer une autre langue, mais vous avez besoin d'un certain type de jeu de clés/valeurs ordonnées.
J'utilise Java. JDK1.6 –
Je suis assez sûr que les tables de hachage raison sont non triés est d'aider le stockage et la vitesse de récupération. Pour cette raison, je suggère d'utiliser une structure externe pour maintenir l'ordre et juste en utilisant la hashtable pour stocker des valeurs (pour une recherche rapide).
Vous pouvez soit envelopper un LinkedHashMap
et synchroniser ou vous pouvez utiliser l'utilitaire Collections.synchronizedMap
pour créer une synchronisation LinkedHashMap
:
Map m = Collections.synchronizedMap(new LinkedHashMap(...));
De l'JavaDoc:
Si plusieurs threads accèdent à une carte de hachage liée en même temps, et au moins un des threads modifie structurellement la carte, il doit être synchronisé extérieurement. Ceci est généralement accompli en synchronisant sur un objet qui encapsule naturellement la carte. Si aucun objet de ce type n'existe, la carte doit être "enveloppée" à l'aide de la méthode Collections.synchronizedMap. Ceci est mieux fait au moment de la création, pour éviter un accès non synchronisé accidentel à la carte
merci beaucoup .. mais ce sera un succès de performance? –
La surcharge de performance sera négligeable (littéralement nanosecondes). – Adamski
Si jdk1.6 vous avez seulement deux types de carte ordonnée EnumMap et LinkedHashMap. Les deux ne sont pas synchronisés.Si vous avez juste besoin de se rappeler l'ordre, utilisez
Map m = Collections.synchronizedMap(new LinkedHashMap(...));
si vous voulez utiliser puis ConcurrentSkipListMap Sorted
- 1. comment garder les éléments en ligne de l'emballage?
- 2. Empêcher double Entrée en Hashtable C++
- 3. comment puis-je ajouter des valeurs à hashTable en utilisant Codedom en C#
- 4. Hashtable lente pour ajouter des valeurs?
- 5. Différences entre .NET Hashtable, Java Hashtable et HashMap
- 6. Comment garder le clavier toujours à l'écran?
- 7. Comment garder les contrôleurs hors de xib
- 8. Comment "garder en vie" avec cookielib et httplib en python?
- 9. Comment garder sons Pour BOUTONS
- 10. Comment itérer sur Hashtable dans JSP
- 11. Hashtable vs Dictionnaire
- 12. Suppression d'un HashTable C++
- 13. Comment supprimer des éléments en double d'un tableau en Perl?
- 14. Quelle quantité de mémoire utilise une Hashtable?
- 15. Créer personnalisé Hashtable
- 16. C++ HashTable Implémentation d'objets
- 17. Comment devrais-je garder trace des DataReaders ouverts?
- 18. Comment trouver des éléments superposés?
- 19. comment obtenir des éléments uniques?
- 20. Garder les branches en phase avec Git
- 21. Réorganisation des éléments dans BindingList en C#?
- 22. WPF Listview lié avec Hashtable
- 23. Garder une connexion en direct avec php?
- 24. Comment garder svn: external à jour en utilisant git-svn?
- 25. Créer des propriétés dynamiques et lier hashtable dans C#
- 26. C# Accès Hashtable des tableaux à deux dimensions
- 27. Gestion des éléments XML vides en Python
- 28. Comment ajouter des éléments à un tableau vide en PHP?
- 29. Comment filtrer des éléments d'une liste en Python?
- 30. Comment créer ContextMenuStrip en C# quels éléments sont des images?
Quelle langue utilisez-vous? –
LinkedHashMap fait partie de Java. – jimyi
J'utilise Java. JDK1.6 –