programing

해시맵 키의 이름을 변경할 수 있습니까?

copysource 2022. 9. 25. 14:49
반응형

해시맵 키의 이름을 변경할 수 있습니까?

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

요소를 제거하고 새 이름으로 다시 붙여 보십시오.지도에 있는 키가String다음과 같은 방법으로 달성할 수 있습니다.

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

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

이름을 변경해야 하는 키 값을 새 키에 할당합니다.그리고 오래된 키를 제거합니다.

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

해시맵의 이름을 바꾸거나 변경할 수 없습니다.key추가 후.

유일한 방법은 이 파일을 삭제/삭제하는 것입니다.key새것으로 삽입합니다.key그리고.value짝.

이유 : 해시맵 내부 구현에서 해시맵key마크가 붙은 수식어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

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

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");

기존 키가 아닌 키도 해시맵에서 기존 키의 값을 가져올 수 있지만 범죄일 수 있습니다.

public  class KeyWrapper<T>{

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

        @Override
        public boolean equals(Object o) {
            return hashCode()==o.hashCode();
        }

        @Override
        public int hashCode() {
            int hash=((String)key).length();//however you want your hash to be computed such that two different objects may share the same at some point
            return hash;
        }
    }

HashMap<KeyWrapper,String> hashmap=new HashMap<>();
KeyWrapper cool_key=new KeyWrapper("cool-key");
KeyWrapper fake_key=new KeyWrapper("fake-key");
hashmap.put(cool_key,"cool-value");
System.out.println("I don't believe it but its: "+hashmap.containsKey(fake_key)+" OMG!!!");

제 경우 실제 키가 아닌 -> 실제 키가 포함된 맵이 있었기 때문에 실제 키가 아닌 것을 맵 내의 리얼로 대체해야 했습니다(이 아이디어는 다른 것과 같습니다).

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

아래 사항을 확인해 주십시오.

  1. 아니요, 이름 변경은 할 수 없습니다.keyHashMap추가 후.

  2. 가장 먼저 삭제 또는 삭제해야 합니다.key그리고 나서 새로운 것을 삽입할 수 있습니다.key와 함께value.

  3. 왜냐하면HashMap사내의 실장HashMap키 수식자는final.

Java 네이티브 HashMap 대신 Bimap을 사용할 경우 가능합니다.
기존 맵 구현이 아니기 때문에 필요에 맞게 맵을 구현해야 합니다.

바이맵(또는 "양방향 지도")은 키와 값의 고유성을 보존하는 지도입니다.이러한 제약으로 인해 BIMAP은 "역방향 뷰"를 지원할 수 있습니다. 이 BIMAP은 이 BIMAP과 동일한 항목을 포함하지만 키와 값이 반대되는 또 다른 BIMAP입니다.

바이맵을 사용하여 보기를 반전시키고 키를 바꿀 수 있습니다.
Apache Commons BidiMapGuava BiMap을 모두 체크합니다.

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

반응형