598 votes

Classe Java qui implémente carte et conserve l’ordre d’insertion ?

Je suis à la recherche d'une classe en java qui a valeur-clé de l'association, mais sans utiliser les tables de hachage. Voici ce que je suis en train de faire:

  1. Ajouter les valeurs dans une table de hachage
  2. Obtenir un itérateur sur la table de hachage.entrySet().
  3. Parcourir toutes les valeurs et tous:
    1. Obtenez une Carte.L'entrée de l'itérateur
    2. Créer un objet de type Module (une classe personnalisée) basée sur la valeur.
    3. Ajouter à la classe d'un Composite;
  4. Afficher le panneau.

Le problème c'est que je n'ai pas de contrôle sur l'ordre que je reçois les valeurs de retour, donc je ne peut pas afficher les valeurs dans un ordre donné (sans coder en dur l'ordre).

Je voudrais utiliser une ArrayList ou Vecteur pour cela, mais plus tard dans le code j'ai besoin de saisir de l'objet Module pour une Clé donnée, je ne peux pas faire avec une liste de tableaux ou de Vecteur.

Personne ne sait d'une libre/open-source Java de la classe qui va le faire, ou un moyen d'obtenir des valeurs d'une table de hachage basée sur le moment où ils ont été ajoutés?

Merci!

906voto

Michael Myers Points 82361

Je suggère un LinkedHashMap ou TreeMap. Un LinkedHashMap qui garde les clés dans l'ordre où ils ont été insérés, tandis qu'un TreeMap sont triées par l'intermédiaire d'un Comparator ou naturels Comparable de la commande des éléments.

Depuis il n'a pas à garder les éléments triés, LinkedHashMap devrait être plus rapide pour la plupart des cas; TreeMap a O(log n) de rendement pour l' containsKey, get, put, et remove, selon la Javadoc, tout en LinkedHashMap est O(1) pour chacun.

20voto

jvdneste Points 852

Si immuable la carte s'adapte à vos besoins puis il y a une bibliothèque par google, appelé goyave (voir aussi la goyave questions)

Goyave fournit une ImmutableMap fiables spécifié par l'utilisateur de l'itération de l'ordre. Cette ImmutableMap a O(1) performance pour containsKey, obtenir. De toute évidence mettre et supprimer ne sont pas pris en charge.

ImmutableMap les objets sont construits à l'aide de l'élégant statique des méthodes pratiques de() et copyOf() ou un Constructeur de l'objet.

6voto

Peter Lawrey Points 229686

Vous pouvez conserver une carte (pour recherche rapide) et la liste (par ordre), mais un LinkedHashMap peut être la plus simple. Vous pouvez également essayer un SortedMap p. ex. TreeMap, qui l’ont n’importe quel ordre que vous spécifiez.

2voto

Lawrence Dol Points 27976

Vous pourriez essayer mon implémentation Lié arbre carte .

1voto

jpalecek Points 31928

Je ne sais pas si c’est opensource, mais après une petite recherche sur Google, j’ai trouvé cette mise en œuvre de la carte à l’aide de ArrayList. Il semble être pré-1.5 de Java, alors vous voudrez genericize, qui devrait être facile. Notez que cette application a accès d’o (n), mais cela ne devrait pas être un problème si vous n’ajoutez pas des centaines de widgets à votre JPanel, dont vous ne devriez pas en tout cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X