我正在寻找一种重命名Hashmap密钥的方法,但我不知道它是否可以在Java中使用。
答案 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)
请注意以下几点:
否,添加后,您无法重命名key
中的HashMap
。
首先,您必须删除或删除该key
,然后才能在key
中插入新的value
。
由于在HashMap
内部实现中,HashMap
的键修饰符是final
。
答案 6 :(得分:0)
您可以使用 Bimap 代替Java本机HashMap。
它不是传统的Map实现,因此您需要确保它适合您的需求。
双向地图(或“双向地图”)是一种保留了 其值和键的唯一性。这个约束 使双图支持“反向视图”,这是另一个双图 包含与此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))
);