是否可以重命名Hashmap密钥?

Ike*_*kes 83 java hashmap

我正在寻找一种重命名Hashmap密钥的方法,但我不知道它是否可以在Java中使用.

Ale*_*eon 120

尝试删除元素并使用新名称再次添加.假设地图中的键是String,可以通过以下方式实现:

Object obj = map.remove("oldKey");
map.put("newKey", obj);
Run Code Online (Sandbox Code Playgroud)

  • +1.最简单的是`map.put("newKey",map.remove("oldKey"));`并提供包含`oldKey` (54认同)
  • 就可读性而言,我非常不同意,我个人更喜欢清楚地看到一个对象从地图中删除,然后添加.由于OP似乎是Java的新手,我决定这样说.然而,为了性能,您的版本当然是首选(因为我不认为编译器会以您的方式优化我的版本). (12认同)
  • 它会导致ConcurrentModificationException (4认同)
  • 对于javac 1.8.0_45,单行版本是两个字节码更短,这让我感到惊讶.更令人讨厌的是泛型,你不能将`obj`传递给`put`而不用它或者将它声明为另一种类型,但当然传递`remove`的结果直接起作用. (3认同)

Dee*_*ani 18

将需要重命名的密钥值分配给新密钥.并删除旧密钥.

hashMap.put("New_Key", hashMap.get("Old_Key"));
hashMap.remove("Old_Key");
Run Code Online (Sandbox Code Playgroud)


Moh*_*hbi 13

hashMap.put("New_Key", hashMap.remove("Old_Key"));
Run Code Online (Sandbox Code Playgroud)

这将做你想要的,但你会注意到键的位置已经改变.


lig*_*ray 7

添加后,您无法重命名/修改hashmap .

唯一的方法是删除/删除密钥并插入新的密钥和值对.

原因:在hashmap内部实现中,Hashmap键修饰符标记为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
}
Run Code Online (Sandbox Code Playgroud)

供参考:HashMap