web-dev-qa-db-fra.com

Est-il possible de renommer une clé Hashmap?

Je cherche un moyen de renommer une clé Hashmap, mais je ne sais pas si c'est possible en Java.

77
Ikes

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);
113
Alexis Pigeon

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");
17
Deepak Mani
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

7
light_ray

Vous ne renommez pas une clé hashmap, vous devez insérer une nouvelle entrée avec la nouvelle clé et supprimer l'ancienne.

4
Hari Menon

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");
0
LiNKeR

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 .

0
dorony