Я ищу способ переименования ключа Hashmap, но я не знаю, возможно ли это на Java.
Можно ли переименовать ключ Hashmap?
Ответ 1
Попробуйте удалить элемент и поместить его снова с новым именем. Предполагая, что ключи на вашей карте String
, это может быть достигнуто следующим образом:
Object obj = map.remove("oldKey");
map.put("newKey", obj);
Ответ 2
Назначьте значение ключа, которое нужно переименовать, на новый ключ. И удалите старый ключ.
hashMap.put("New_Key", hashMap.get("Old_Key"));
hashMap.remove("Old_Key");
Ответ 3
hashMap.put("New_Key", hashMap.remove("Old_Key"));
Это сделает то, что вы хотите, но вы заметите, что местоположение ключа изменилось.
Ответ 4
Вы не можете переименовать/изменить ключ hashmap после добавления.
Единственный способ - удалить/удалить ключ и вставить новую пару ключ и значение.
Причина: во внутренней реализации hashmap модификатор ключа Hashmap помечен как финальный.
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
Ответ 5
Вы не переименовываете ключ hashmap, вам нужно вставить новую запись с новым ключом и удалить старый.
Ответ 6
Вы можете, если вместо Java HashMap вы будете использовать Bimap.
Это не традиционная реализация Map, и вам нужно убедиться, что она соответствует вашим потребностям.
Двунаправленная карта (или "двунаправленная карта") - это карта, которая сохраняет уникальность своих значений, а также ключей. Это ограничение позволяет бимапам поддерживать "инверсное представление", которое является еще одним бимапом, содержащим те же записи, что и этот бимап, но с обращенными ключами и значениями.
Используя bimap, вы можете инвертировать вид и заменить ключ.
Оформить заказ на Apache Commons BidiMap и Guava BiMap.
Ответ 7
Я бы сказал, что суть ключей hasmap для целей доступа к индексу и не более того, а не хакерство: создание класса-обертки для ключей вокруг значения ключа, чтобы объект-обертка для ключей стал ключом хеш-карты для доступа к индексу, так что вы может получить доступ и изменить значение объекта оболочки ключа для ваших конкретных потребностей:
public class KeyWrapper<T>{
private T key;
public KeyWrapper(T key){
this.key=key;
}
public void rename(T newkey){
this.key=newkey;
}
}
ПримерExample
HashMap<KeyWrapper,String> hashmap=new HashMap<>();
KeyWrapper key=new KeyWrapper("cool-key");
hashmap.put(key,"value");
key.rename("cool-key-renamed");