2010-01-08 4 views
2

J'ai deux listes A1, A2. Chaque élément de A1 serait la clé et chaque élément de A2 la valeur correspondante. Donc la solution que j'ai trouvé est en boucle sur A1 (A1 et A2 ont la même taille) rendant hashmap.add (A1 [i], A2 [i]) mais existe-t-il un moyen d'envoyer directement les paires de valeurs clés en deux ensembles? Je veux éviter les boucles ça va ralentir mon code..Merci à l'avance!HashMap: obtenir une liste de clés ou une valeur

Répondre

2

Vous avez une liste de paires de valeurs clés. La seule façon de prendre cette liste et de l'ajouter dans le Hashmap est d'itérer la liste. Si vous avez stocké vos paires de valeurs clés dans un autre type d'objet Map, vous pouvez utiliser le constructeur HashmapHashMap(Map<? extends K,? extends V> m) mais pas avec votre ArrayList. Ne craignez pas l'itération dans votre code si c'est la bonne approche.

Rappelez-vous Polya: Trouver une solution, puis voir si vous pouvez trouver une meilleure solution.

+2

Et bien sûr, ce constructeur devrait simplement parcourir la carte des paramètres. –

+0

Salut Dougman, merci pour la réponse et petite phrase! – user235693

+0

michael bon détail que vous venez de me donner! – user235693

5

"Je veux éviter les boucles cela va ralentir mon code." Chaque fois que le code fait quoi que ce soit, il ralentit votre code. La clé est d'éviter de faire des choses que vous n'avez pas besoin de faire. Quelque chose doit parcourir vos listes.

0

Peut-être que vous seriez en mesure d'éviter l'itération pour insérer les données dans des tableaux le faisant directement dans le hashmap.

Bonne chance!

+0

oui j'ai enfin trouvé un moyen de faire que mon code me le permette! :) – user235693

2

Si vous êtes en mesure de contrôler l'ordre dans lequel vous insérez les éléments dans les tableaux, et que vous pouvez le faire dans l'ordre de tri, vous n'avez peut-être pas besoin de HashMap après tout. Alors que la recherche hachée affichera temps constant amorti, vous pouvez rechercher O (log n) fois avec binary search sur une séquence d'accès aléatoire triée comme un tableau. La fonction Arrays#binarySearch() vous permet de déterminer quel élément, le cas échéant, correspond à votre clé dans le premier tableau et, étant donné cette position, vous pouvez accéder à la valeur correspondante dans le tableau parallèle.

Cette approche est la plus avantageuse lorsque vous ne compilez les données qu'une seule fois et que vous recherchez fréquemment des entrées, et que vous n'effectuez aucune addition ou suppression ultérieure d'entrées.

+1

Vous pourriez même envelopper dans votre propre implémentation de Map, qui pourrait avoir un constructeur de 2 arguments de liste :) – extraneon

+0

Oui, avec la mise en garde que vous voudriez probablement lancer 'UnsupportedOperationException' pour toutes les méthodes de mutation, y compris celles exposé par les itérateurs. – seh

+0

Salut, c'est le problème, je ne peux pas contrôler l'ordre dans lequel j'insère les éléments dans les tableaux. – user235693

Questions connexes