Je cherche un moyen de renommer une clé Hashmap, mais je ne sais pas si c'est possible en Java.
Réponses
Trop de publicités?Je dirais que l'essence des clés de hashmap est de permettre l'accès à l'index et rien de plus, mais voici une astuce : créer une classe key-wrapper autour de la valeur de la clé pour que l'objet key-wrapper devienne la clé de hashmap pour l'accès à l'index, de sorte que vous puissiez 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");
On pourrait aussi faire en sorte qu'une clé non existante puisse obtenir la valeur d'une clé existante à partir de la hashmap, mais je crains que ce ne soit criminel, de toute façon :
public class KeyWrapper<T>{
private T key;
public KeyWrapper(T key){
this.key=key;
}
@Override
public boolean equals(Object o) {
return hashCode()==o.hashCode();
}
@Override
public int hashCode() {
int hash=((String)key).length();//however you want your hash to be computed such that two different objects may share the same at some point
return hash;
}
}
Exemple
HashMap<KeyWrapper,String> hashmap=new HashMap<>();
KeyWrapper cool_key=new KeyWrapper("cool-key");
KeyWrapper fake_key=new KeyWrapper("fake-key");
hashmap.put(cool_key,"cool-value");
System.out.println("I don't believe it but its: "+hashmap.containsKey(fake_key)+" OMG!!!");
Dans mon cas, j'avais une carte contenant des clés non réelles -> des clés réelles, j'ai donc dû remplacer les clés non réelles par des clés réelles dans ma carte (l'idée est la même que celle des autres).
getFriendlyFieldsMapping().forEach((friendlyKey, realKey) ->
if (map.containsKey(friendlyKey))
map.put(realKey, map.remove(friendlyKey))
);
Veuillez consulter les points ci-dessous :
-
Non, vous ne pouvez pas renommer le
key
deHashMap
une fois ajouté. -
Tout d'abord, vous devez supprimer ou enlever cette
key
et ensuite vous pouvez insérer avec de nouvelleskey
convalue
. -
Parce que dans
HashMap
la mise en œuvre interne leHashMap
Le modificateur de touche estfinal
.
Vous pouvez, si au lieu du HashMap natif de Java vous utilisez un Bimap .
Il ne s'agit pas de la mise en œuvre traditionnelle de la carte, et vous devez vous assurer qu'elle répond à vos besoins.
Une bimap (ou "carte bidirectionnelle") est une carte qui préserve l'unicité de ses composantes. l'unicité de ses valeurs ainsi que celle de ses clés. Cette contrainte permet aux bimaps de prendre en charge une "vue inverse", c'est-à-dire une autre bimap contenant les mêmes entrées que ce bimap mais avec des clés et des valeurs inversées. valeurs inversées.
En utilisant une bimap, vous pouvez inverser la vue et remplacer la clé.
Vérifiez les deux Apache Commons BidiMap et Goyave BiMap .
- Réponses précédentes
- Plus de réponses