해시맵 키의 이름을 변경할 수 있습니까?
해시맵 키의 이름을 바꾸는 방법을 찾고 있습니다만, 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))
);
아래 사항을 확인해 주십시오.
아니요, 이름 변경은 할 수 없습니다.
key
의HashMap
추가 후.가장 먼저 삭제 또는 삭제해야 합니다.
key
그리고 나서 새로운 것을 삽입할 수 있습니다.key
와 함께value
.왜냐하면
HashMap
사내의 실장HashMap
키 수식자는final
.
Java 네이티브 HashMap 대신 Bimap을 사용할 경우 가능합니다.
기존 맵 구현이 아니기 때문에 필요에 맞게 맵을 구현해야 합니다.
바이맵(또는 "양방향 지도")은 키와 값의 고유성을 보존하는 지도입니다.이러한 제약으로 인해 BIMAP은 "역방향 뷰"를 지원할 수 있습니다. 이 BIMAP은 이 BIMAP과 동일한 항목을 포함하지만 키와 값이 반대되는 또 다른 BIMAP입니다.
바이맵을 사용하여 보기를 반전시키고 키를 바꿀 수 있습니다.
Apache Commons BidiMap과 Guava BiMap을 모두 체크합니다.
언급URL : https://stackoverflow.com/questions/10766906/is-it-possible-to-rename-a-hashmap-key
'programing' 카테고리의 다른 글
마리아에서 보기에 색인을 추가할 수 있습니까?DB (0) | 2022.09.25 |
---|---|
PHP에서 static 메서드와 nonstatic 메서드를 선언할 수 있습니까? (0) | 2022.09.25 |
MySQL에서 열 이름 바꾸기 (0) | 2022.09.25 |
check 절에서 CURDATE()를 사용하는 방법 (0) | 2022.09.25 |
Larabel에서 POST의 모든 정보를 얻는 방법 (0) | 2022.09.25 |