Je cherche un moyen de renommer une clé Hashmap, mais je ne sais pas si c'est possible en Java.
Essayez de supprimer l'élément et de le replacer avec le nouveau nom. En supposant que les clés de votre carte soient String
, cela pourrait être réalisé de cette façon:
Object obj = map.remove("oldKey");
map.put("newKey", obj);
Attribuez la valeur de la clé, qui doit être renommée, à une nouvelle clé. Et retirez l'ancienne clé.
hashMap.put("New_Key", hashMap.get("Old_Key"));
hashMap.remove("Old_Key");
hashMap.put("New_Key", hashMap.remove("Old_Key"));
Cela fera ce que vous voulez mais vous remarquerez que l'emplacement de la clé a changé.
Vous ne pouvez pas renommer/modifier la clé de hachage une fois ajoutée.
Le seul moyen consiste à supprimer/supprimer la clé et à insérer une nouvelle paire clé/valeur.
Reason: Dans l'implémentation interne de hashmap, le modificateur de clé Hashmap marqué comme final.
static class Entry<K ,V> implements Map.Entry<K ,V>
{
final K key;
V value;
Entry<K ,V> next;
final int hash;
...//More code goes here
}
Pour référence: HashMap
Vous ne renommez pas une clé hashmap, vous devez insérer une nouvelle entrée avec la nouvelle clé et supprimer l'ancienne.
Je dirais que l’essence des clés hasmap est à des fins d’accès à l’index. Rien de plus, mais voici un hack: créer une classe key-wrapper autour de la valeur de la clé pour que l’objet key-wrapper devienne la clé de hachage pour l’accès à un index; peut accéder et changer la valeur de l'objet key-wrapper pour vos besoins spécifiques:
public class KeyWrapper<T>{
private T key;
public KeyWrapper(T key){
this.key=key;
}
public void rename(T newkey){
this.key=newkey;
}
}
Exemple
HashMap<KeyWrapper,String> hashmap=new HashMap<>();
KeyWrapper key=new KeyWrapper("cool-key");
hashmap.put(key,"value");
key.rename("cool-key-renamed");
Vous pouvez, si au lieu de Java HashMap natif, vous utiliserez un Bimap .
Ce n’est pas l’implémentation traditionnelle de la carte et vous devez vous assurer que celle-ci répond à vos besoins.
Une bimap (ou "carte bidirectionnelle") est une carte qui préserve l'unicité de ses valeurs ainsi que celle de ses clés. Cette contrainte permet aux bimaps de prendre en charge une "vue inverse", qui est une autre bimap contenant les mêmes entrées que cette bimap, mais avec des clés et des valeurs inversées.
En utilisant une bimap, vous pouvez inverser la vue et remplacer la clé.
Commander les deux Apache Commons BidiMap et Guava BiMap .