Можно ли переименовать ключ Hashmap?

Я ищу способ переименования ключа Hashmap, но я не знаю, возможно ли это на Java.

Ответ 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");