Hashmap 키의 이름을 바꾸는 방법을 찾고 있지만 Java에서 가능한지 모르겠습니다.
Hashmap 키의 이름을 바꾸는 방법을 찾고 있지만 Java에서 가능한지 모르겠습니다.
답변:
요소를 제거하고 새 이름으로 다시 넣으십시오. 지도의 키가라고 가정하면 다음과 String
같이 얻을 수 있습니다.
Object obj = map.remove("oldKey");
map.put("newKey", obj);
map.put( "newKey", map.remove( "oldKey" ) );
oldKey
obj
에 put
캐스팅 또는 다른 유형으로 선언하지 않고 있지만, 물론의 결과를 전달하는 remove
직접 작동합니다.
hashMap.put("New_Key", hashMap.remove("Old_Key"));
이렇게하면 원하는 작업을 수행 할 수 있지만 키의 위치가 변경되었음을 알 수 있습니다.
해시 맵의 이름을 바꾸거나 수정할 수 없습니다. key
을 추가 한 .
유일한 방법은 삭제 / 제거하는 것입니다. key
신규 key
및 value
쌍으로 삽입하는 것 입니다.
이유 : hashmap 내부 구현에서 Hashmap 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))
);