J'ai un haschmap et j'ai besoin d'aller chercher un article par sa valeur entière. Je remarque qu'il y a une fonction contenant (), mais il semblerait que je dois toujours itérer via la carte pour trouver l'index correct quand même. P>
Ma question est; Pourquoi utiliser ContainValue () si je suis obligé de le traverser ensuite? P>
aussi, je manque complètement le point? ; -) p>
7 Réponses :
Une carte est une clé
Vous pouvez utiliser ContainValue () dans les cas où vous n'avez pas besoin de traverser l'ensemble du hashmap, par exemple si vous souhaitez ajouter une paire de la valeur de clé à hayphmap, mais avant que vous souhaitiez savoir si cette valeur est dans HASHMAP . Dans ce cas pour ajouter une opération, vous n'avez pas besoin de traverser tout HASHMAP. P>
ContainsValue () Traversera le hashmap: Docjar.com/ HTML / API / JAVA / UTIL / HASHMAP.JAVA.HTML # 631 S'il veut savoir si une valeur est sur la carte, ces informations doivent être conservées dans un ensemble séparé.
Oui, je sais que sa question était "Pourquoi utiliser ContientValue () si je suis obligé de le traverser ensuite?" Je l'ai donc traduit pour savoir pourquoi contient-il de convaincre s'il a besoin de traverser le hashmap par la suite (pour la deuxième fois).
Vous n'êtes pas obligé de le traverser après. ContactValue () Code> est utile dans des situations où vous n'avez pas besoin de savoir précisément où la valeur que vous, mais plutôt lorsque vous n'avez besoin que de savoir s'il est déjà sur la carte. Dans des situations où vous devez savoir précisément où dans la carte la valeur est la valeur, ne vous inquiétez pas en utilisant
contenant () code> - saute droit à l'itérateur et le trouver. P>
Un hashmap (ou carte en général) utilise des paires de clés / de valeur. Lorsque vous ajoutez quelque chose à la carte, vous devez spécifier une clé et c'est cette touche qui est utilisée à nouveau plus tard lors de la récupération de la valeur. Sur la base de la mise en oeuvre du hashmap, étant donné une clé, la récupération d'une valeur est effectuée dans O (1) heure.
contenant est une méthode utile pour vérifier qu'un hashmap contient la valeur que vous recherchez, mais je n'ai pas t vraiment voir pourquoi vous utilisez cela pour récupérer la valeur que vous recherchez ?? P>
Le moyen correft d'utiliser une carte serait quelque chose comme: p> Vous pouvez désormais obtenir vos objets en faisant: p> Object myObject = myMap.get(99);
Une carte mappe une clé à une valeur. Si vous avez une valeur et que vous savez que la carte contient cette valeur, pourquoi avez-vous besoin de la clé plus?
D'autre part, si vous avez vraiment besoin de la clé ou que vous n'avez qu'une propriété de la valeur, vous pouvez itérer le Entrée () Code>, Vérifiez la valeur et renvoyez la clé si trouvé: p>
Permettez-moi de recadrer cette question pour Frederik: P>
Eh bien, contientValue (), comparait-il en interne (son paramètre d'entrée) avec chaque "valeur" dans le hashmap? Ou utilise-t-il des hashcoding (ou une autre technique) pour générer le résultat? Pour l'ancien cas, nous pourrions simplement utiliser un itérateur pour traverser et faire correspondre l'existence de notre valeur avec toute la "valeur" de Hashmap. La signification de la question est dans la performance, ou la vitesse! P>
Je ne vois pas comment recadrer la question est bénéfique dans ce cas.
Les réponses précédentes sont hors contexte.
Je pense que map.ContainsValue est une erreur dans la conception de l'interface de la carte. P>
On rencontre très parfois des implémentations de la carte qui fournissent une implémentation plus rapide que linéaire de Concevalue. Par exemple, une carte peut représenter à l'intérieur chaque valeur distincte en tant que petit entier, puis utiliser des motifs de bits pour représenter des ensembles de valeurs. Une telle carte pourrait être capable de détecter en temps constant qu'il n'avait jamais vu une valeur donnée auparavant (bien qu'elle puisse toujours prendre du temps linéaire pour renvoyer un résultat affirmatif). P>
Cependant, une opération qui prend parfois du temps linéaire et prend parfois du temps constant n'est pas une base utile pour un algorithme générique. Vous ne pouvez pas substituer à une liste linité pour une arracheListe et vous attendre à ce que les choses fonctionnent bien, même s'ils soutiennent tous les deux un accès aléatoire dans leur API. Un client qui a besoin d'une conception de temps constante doit conserver un hashset distinct de valeurs à assurer de bonnes performances. Les clients satisfaits de la performance linéaire peuvent simplement écrire la boucle elle-même. P>
Même si les responsables de l'interface de la carte regrettent également d'ajouter de la conceptionValue, il leur est évidemment impossible de le supprimer maintenant. P>