soit vous voulez utiliser un LinkedHashMap qui vous permet d'accéder à des valeurs ajoutées à la carte en utilisant l'indice de l'ordre dans lequel ils ont été ajouté.
Ou vous voulez utiliser 2 HashMaps. Un pour indexer par la valeur de chaîne et le second pour convertir la valeur entière en la clé de valeur de chaîne de la première carte. Ensuite, simple à obtenir la clé et la valeur de l'index:
String key = mapByIntToStringKey.get(index);
V value = mapByStringKey.get(key);
// now have both key and value, no linear searching so should be fast
Ainsi vos cartes contiendraient: mapByStringKey = {corpus \ 2.txt = [moineau chat], corpus \ 4.txt = [moineau éléphant], corpus \ 1.txt = [vache éléphant], corpus \ 3.txt = [chat de vache]}
mapByIntToStringKey {2 = corpus \ 2.txt, 4 = corpus \ 4.txt, 1 = corpus \ 1.txt }
bien que cela suppose que toutes vos clés ne sont pas simplement "corpus" + index + ". Txt". Si toutes les clés sont comme ci-dessus alors si les index ne sont pas clairsemés, vous pouvez utiliser un ArrayList simple (mentionné précédemment) et utiliser get (index) qui est rapide (directement dans un tableau, ne peut pas obtenir beaucoup plus rapide que cela), puis reconstruire la clé de chaîne en utilisant l'expression ci-dessus. Si les index sont clairsemés (certains sont manquants, il existe des espaces vides), utilisez simplement mapByIntToStringKey mais remplacez par mapByIntToValue et reconstruisez toute clé de chaîne dont vous avez besoin en utilisant l'expression de chaîne précédente.
La haute réponse actuelle me semble très étrange, en ce sens que la suggestion est de saisir la carte en utilisant le bit d'index int seulement d'une clé composée. Si je ne le lis pas correctement, cela signifie que vous perdez la possibilité de rechercher des valeurs dans la carte à l'aide de la clé de chaîne seule ou peut-être que vous pouvez toujours en déduire l'indice int à partir de la clé de chaîne.
Vous devez implémenter (correctement) hashCode et égal - si vous le basez uniquement sur le membre d'index, vous pouvez l'utiliser comme un "index" piraté dans votre carte de hachage. –
@Steven - thx pour le mettre en évidence. J'ai modifié de façon appropriée. –
c'est pourquoi je n'aime pas Java. dans d'autres langues, vous résolvez ce problème en utilisant des tuples, qui implémentent la comparaison, l'égalité, et le hashcode pour vous – Claudiu