是否可以重命名Hashmap密钥?

时间:2012-05-26 14:03:00

标签: java hashmap

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

9 个答案:

答案 0 :(得分:104)

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

Object obj = map.remove("oldKey");
map.put("newKey", obj);

答案 1 :(得分:17)

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

hashMap.put("New_Key", hashMap.get("Old_Key"));
hashMap.remove("Old_Key");

答案 2 :(得分:10)

hashMap.put("New_Key", hashMap.remove("Old_Key"));

这会做你想要的,但你会发现钥匙的位置已经改变了。

答案 3 :(得分:6)

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

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

原因 :在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
}

供参考:HashMap

答案 4 :(得分:4)

您不重命名散列映射关键字,必须使用新密钥插入新条目并删除旧密钥。

答案 5 :(得分:1)

请注意以下几点:

  1. 否,添加后,您无法重命名key中的HashMap

  2. 首先,您必须删除或删除该key,然后才能在key中插入新的value

  3. 由于在HashMap内部实现中,HashMap的键修饰符是final

答案 6 :(得分:0)

您可以使用 Bimap 代替Java本机HashMap。
它不是传统的Map实现,因此您需要确保它适合您的需求。

  

双向地图(或“双向地图”)是一种保留了   其值和键的唯一性。这个约束   使双图支持“反向视图”,这是另一个双图   包含与此bimap相同的条目,但具有反向键和   值。

使用bimap,可以反转视图并替换键。
检出Apache Commons BidiMap和Guava BiMap

答案 7 :(得分:0)

我认为hasmap键的本质是用于索引访问,仅此而已,这是一个hack:围绕键的值创建一个key-wrapper类,以便key-wrapper对象成为用于索引访问的hashmap键,因此您可以根据特定需求访问和更改包装器对象的值:

Container(
    child: Icon(
        Icons.arrow_back,
        size: 20.0
        color: Color(0xffffffff),
    ),
    padding: EdgeInsets.all(10.0),
    margin: EdgeInsets.fromLTRB(0, 10.0, 0, 0.0),
    decoration: BoxDecoration(
        color: Color(0xff03b673),
        borderRadius: BorderRadius.all(Radius.circular(100.0)),
    ),
)

示例

public class KeyWrapper<T>{

      private T key;
      public KeyWrapper(T key){
         this.key=key;
       }

      public void rename(T newkey){
              this.key=newkey;
       }

}

答案 8 :(得分:0)

在我的情况下,地图包含非实键->实键,因此我不得不用地图中的实数替换非实数(这个想法与其他想法一样)

getFriendlyFieldsMapping().forEach((friendlyKey, realKey) ->
    if (map.containsKey(friendlyKey))
        map.put(realKey, map.remove(friendlyKey))
);