Java HashMap indexés sur 2 touches
Je veux créer une table de hachage en java pour les utilisateurs ayant des préférences. Ce serait facile de le faire dans une base de données, mais malheureusement je ne peux pas utiliser une base de données. Ce dont j'ai besoin est un moyen de trouver un utilisateur par son nom dans la table de hachage, et de trouver tous les utilisateurs avec un certain intérêt (par exemple le golf). Si je supprime un utilisateur, puis tous leurs intérêts doivent être supprimés.
Quelqu'un connait un moyen agréable de faire de cette structure de données?
Votre sujet est trompeur, comme vous pouvez le voir dans certaines des réponses.
OriginalL'auteur Marius | 2009-04-28
Vous devez vous connecter pour publier un commentaire.
Savez-vous que vous vraiment besoin d'avoir un deuxième indice. Vous pouvez constater qu'une recherche de chaque utilisateur est assez rapide, sauf si vous avez des millions d'utilisateurs.
L'exemple suivant prend 51 micro-seconde pour scanner 1 000 utilisateurs. Il faut 557 micro-secondes de balayage de 10 000 utilisateurs.
Je ne dirais pas l'optimisation de la collecte jusqu'à ce que vous savez si il y aurait une différence.
OriginalL'auteur Peter Lawrey
Je vous suggère de créer votre propre structure de données pour la tenue de l'information. À l'intérieur de la classe que vous pourriez avoir deux HashMaps le stockage de l'information pertinente. Ensuite, écrivez vos propres méthodes pour insérer et supprimer un utilisateur.
De cette façon, vous avez le contrôle sur l'insérer/supprimer des opérations, tout en étant capable de faire une requête à chaque attribut séparément.
OriginalL'auteur B.E.
Solution la plus simple est d'utiliser une des Communes de la Collection MultiKeyMap même si il manque des génériques.
...Regardez ce fil trop généricisés-commons-collection
OriginalL'auteur KarlP
il semble que vous pouvez utiliser quelque chose comme un bi-directionnelle de la carte pour mettre en place quelque chose comme ça. découvrez http://google-collections.googlecode.com/svn/trunk/javadoc/index.html?com/google/common/collect/BiMap.html pour certains doco.
bien qu'il ne marche pas vous donner exactement ce dont vous avez besoin dans la question, son la moitié du chemin.
OriginalL'auteur Chii
Ce peut-être exagéré pour vos besoins, mais je ne sais pas comment complexe et sensible à la vitesse de vos besoins, donc je vais le jeter là-bas...
Avez-vous pensé à un en mémoire (ou même locales, sur disque comme SQLite) de la base de données pour gérer vos données. Cela permettrait de vous permettre de stocker vos données dans une voie qui permet beaucoup plus de puissance dans la façon dont vous search/index vos données, sans beaucoup de frais d'écrire votre propre code.
OriginalL'auteur RHSeeger
Vient de mettre les utilisateurs dans une liste de tableaux, et de marcher sur elle jusqu'à ce que vous trouvé le(s) dont vous avez besoin. Donner à chaque utilisateur un ensemble d'intérêts. Une fois que vous obtenez suffisamment d'utilisateurs qu'il prend trop de temps, de les trier.
Une fois que cela prend trop de temps, jetez un oeil à la distribution des intérêts. Si vous avez un faible nombre de différentes, de les stocker dans un bitmap. Si vous avez un nombre limité de combinaisons d'intérêts, de les stocker séparément et de les donner à un utilisateur de l'un de ces.
Commencer simple, les ordinateurs sont rapides. Mais masquer la mise en œuvre, de sorte que vous pouvez le modifier.
[hmm, l'obtention de votes négatifs pour cette]. À la question: vous aurez besoin d'un grand nombre d'utilisateurs avant de ce code est aussi lent qu'une base de données. (sur l'actuelle matériel, au moins quelques centaines de milliers)
OriginalL'auteur Stephan Eggermont
Je voudrais mettre en œuvre les éléments suivants
HashMap qui comprend la clé et la valeur peut être n'importe quel objet qui comprend la userpreferences. Les préférences de l'utilisateur, une liste d'intérêt par exemple.
Et une autre table de hachage avec une participation de clés et une liste des utilisateurs qui sont intéressés par cela.
Lorsque vous supprimer les messages postés un utilisateur, vous pouvez obtenir tout l'intérêt qu'il a et de supprimer le nom d'utilisateur de l'intérêt HashMap liste.
Lorsque l'intérêt HashMap liste est vide, vous pouvez supprimer les messages postés l'intérêt de la table de hachage.
Prendre soin, lorsque 2 ou plusieurs utilisateurs ont le même intérêt. Vous ne pouvez pas supprimer les messages postés l'intérêt uniquement lorsqu'un utilisateur est supprimé.
L'inconvénient, c'est que vous avez des informations redondantes.
OriginalL'auteur Markus Lausberg
Vous pouvez utiliser 2 HashMaps. Mais une recherche uniquement dans des creux de préférences peuvent être complexes.
Peut-être que vous n'avez pas besoin de cette solution, mais beaucoup de gens ont encore des mêmes problèmes.
OriginalL'auteur Konstantin Petrukhnov