Hashmapキーの名前を変更する方法を探していますが、Javaで可能かどうかはわかりません。
Hashmapキーの名前を変更する方法を探していますが、Javaで可能かどうかはわかりません。
回答:
要素を削除して、新しい名前で再度配置してください。マップのキーがであると仮定すると、String
その方法で達成できます。
Object obj = map.remove("oldKey");
map.put("newKey", obj);
map.put( "newKey", map.remove( "oldKey" ) );
、提供されている内容ですoldKey
obj
しput
、それをキャストするか、別のタイプとして、それを宣言しなくても、もちろん結果渡すremove
直接作品を。
hashMap.put("New_Key", hashMap.remove("Old_Key"));
これはあなたが望むことを行いますが、キーの場所が変更されていることに気づくでしょう。
hasmapキーの本質はインデックスアクセスの目的にあると主張しますが、これはハックです:キーラッパークラスをキーの値の周りに作成して、キーラッパーオブジェクトがインデックスアクセスのハッシュマップキーになるようにします。特定のニーズに応じて、キーラッパーオブジェクトの値にアクセスして変更できます。
public class KeyWrapper<T>{
private T key;
public KeyWrapper(T key){
this.key=key;
}
public void rename(T newkey){
this.key=newkey;
}
}
例
HashMap<KeyWrapper,String> hashmap=new HashMap<>();
KeyWrapper key=new KeyWrapper("cool-key");
hashmap.put(key,"value");
key.rename("cool-key-renamed");
存在しないキーでハッシュマップから既存のキーの値を取得することもできますが、とにかくそれが犯罪である可能性があります。
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;
}
}
例
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!!!");
私の場合、実際のキーではないマップ->実際のキーを含むマップがあったので、マップ内の実際でないキーを実際のキーで置き換える必要がありました(アイデアは他のものと同じです)。
getFriendlyFieldsMapping().forEach((friendlyKey, realKey) ->
if (map.containsKey(friendlyKey))
map.put(realKey, map.remove(friendlyKey))
);