Programing

Hashmap 키의 이름을 바꿀 수 있습니까?

lottogame 2020. 10. 10. 09:31
반응형

Hashmap 키의 이름을 바꿀 수 있습니까?


Hashmap 키의 이름을 바꾸는 방법을 찾고 있지만 Java에서 가능한지 모르겠습니다.


요소를 제거하고 새 이름으로 다시 넣으십시오. 지도의 키가라고 가정하면 다음과 String같이 얻을 수 있습니다.

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

이름을 바꿔야하는 키 값을 새 키에 할당합니다. 그리고 이전 키를 제거하십시오.

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

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

이렇게하면 원하는 작업을 수행 할 수 있지만 키의 위치가 변경되었음을 알 수 있습니다.


추가 된 해시 맵 키의 이름을 바꾸거나 수정할 수 없습니다 .

유일한 방법은 키를 삭제 / 제거하고 새 키와 값 쌍으로 삽입하는 것입니다.

이유 : 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


해시 맵 키의 이름을 바꾸지 않고 새 키로 새 항목을 삽입하고 이전 항목을 삭제해야합니다.


Java 기본 HashMap 대신 Bimap을 사용할 수 있습니다 .
전통적인지도 구현이 아니므로 필요에 맞는지 확인해야합니다.

바이 맵 (또는 "양방향 맵")은 해당 값과 키의 고유성을 유지하는 맵입니다. 이 제약 조건을 사용하면 Bimap이이 Bimap과 동일한 항목을 포함하지만 키와 값이 반전 된 또 다른 Bimap 인 "역보기"를 지원할 수 있습니다.

바이 맵을 사용하여 뷰를 반전하고 키를 바꿀 수 있습니다.
Apache Commons BidiMap 및 Guava BiMap을 모두 확인하십시오 .


나는 hasmap 키의 본질이 인덱스 액세스 목적을위한 것이며 더 이상은 아니지만 여기에 핵이 있다고 주장합니다. 키 값 주위에 키 래퍼 클래스를 만들어 키 래퍼 객체가 인덱스 액세스를위한 해시 맵 키가됩니다. 특정 요구에 맞게 키 래퍼 개체의 값에 액세스하고 변경할 수 있습니다.

public class KeyWrapper<T>{

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

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

}

   HashMap<KeyWrapper,String> hashmap=new HashMap<>();
   KeyWrapper key=new KeyWrapper("cool-key");
   hashmap.put(key,"value");
   key.rename("cool-key-renamed");

참고 URL : https://stackoverflow.com/questions/10766906/is-it-possible-to-rename-a-hashmap-key

반응형