Est-il possible de renommer une table de hachage de la clé?
Je suis à la recherche d'un moyen de renommer une table de hachage de la clé, mais je ne sais pas si c'est possible en Java.
- Gosh, je ne l'espère pas. La suppression et la réintégration de la paire clé/valeur qui semble être la voie à suivre. Notez que vous normalement juste la poignée de références dans la carte elle-même de toute façon.
- Veuillez ne pas modifier la clé de hachage entrée! Si vous êtes chanceux, vous pourrez le changer pour quelque chose avec le même hashcode et vous aurez juste aller un peu fou à essayer de comprendre ce qui s'est passé; si vous êtes malchanceux, vous vous retrouverez avec une entrée qui ne peut pas être trouvé (enfin, pas jusqu'à la prochaine reconstruction de l'ensemble de la table). Retirez puis réinsérez est beaucoup plus saine, et devrait être assez bon marché (c'est toutes les références, après tout).
Vous devez vous connecter pour publier un commentaire.
Essayez de supprimer l'élément et de le mettre à nouveau avec le nouveau nom. En supposant que les clés de votre carte sont
String
, il ne pourrait être atteint de cette façon:map.put( "newKey", map.remove( "oldKey" ) );
et fourni contientoldKey
obj
àput
sans moulage ou le déclarer comme un autre type, mais bien sûr, le résultat le passage deremove
directement œuvres.Affecter la valeur de la clé, qui doivent être renommés, à une nouvelle clé. Et retirer la clé.
Cela va faire ce que vous voulez, mais, vous remarquerez que l'emplacement de la clé a changé.
Vous ne pouvez pas renommer/modifier le hashmap clé une fois ajouté.
Seul moyen est de supprimer/retirer la clé et insérez à nouveau la clé et une valeur paire.
Raison : Dans la hashmap mise en œuvre interne de la table de hachage de la clé modificateur marqué comme final.
Pour Référence : HashMap
Vous de ne pas renommer une table de hachage de la clé, vous devez insérer une nouvelle entrée avec la nouvelle clé et supprimer l'ancien.
Je dirais l'essence de hasmap clés sont à l'indice des fins d'accès et rien de plus, mais voici un hack: faire une classe wrapper autour de la valeur de la clé pour la clé-objet wrapper devient la table de hachage de la clé d'index d'accès, de sorte que vous pouvez accéder et modifier la clé-wrapper de l'objet de valeur pour vos besoins spécifiques:
Exemple
Vous pouvez, si, au lieu de Java native HashMap, vous allez utiliser un Bimap.
C'est pas de la traditionnelle Carte de mise en œuvre, et vous devez vous assurer qu'elle est adaptée à vos besoins.
À l'aide d'un bimap, vous pouvez inverser le point de vue et de remplacer la clé.
La caisse à la fois Apache Commons BidiMap et Goyave BiMap.