Map 객체의 얕은 복사본과 깊은 복사
2634 단어 Java 기반
public class CopyMap {
public static void main(String[] args) {
Map map = new HashMap();
map.put( "key1", 1);
Map mapFirst = map;
System. out.println( mapFirst);
map.put( "key2", 2);
System. out.println( mapFirst);
}
}
위 프로그램의 예상 출력 값은 mapFrist의 값이 모두 1이지만 실제 출력 결과는 다음과 같습니다.
{key1=1}
{key2=2, key1=1}
이것은 맵에 얕은 복사가 발생했기 때문입니다. 맵First는 맵의 인용을 복제했을 뿐입니다. 맵과 같은 메모리 영역을 사용하기 때문에 맵을 수정할 때 맵First의 값도 변할 수 있습니다.
PS:
이른바 얕은 복제란 대상만 복제하는 인용이고 두 인용은 여전히 같은 대상을 가리키며 메모리에서 같은 메모리를 차지한다.복사된 대상의 모든 변수는 원래의 대상과 같은 값을 함유하고 있으며, 모든 다른 대상에 대한 인용은 여전히 원래의 대상을 가리킨다.다시 말하면 얕은 복제는 고려된 대상만 복제하고 인용된 대상은 복제하지 않는다는 것이다.
심복제: 복제된 대상의 모든 변수는 원래의 대상과 같은 값을 포함하고 다른 대상을 인용하는 변수를 제외한다.다른 대상을 인용하는 변수는 복사된 새로운 대상을 가리키며, 더 이상 원래 인용된 대상이 아니다.다시 말하면 복제할 대상이 인용한 대상을 깊이 복제한 것이다.
어떻게 해결합니까?깊이 있는 복사를 사용하여 전체 대상을 복사합니다. 인용 맵 중의 하나인putAll 방법이라고 하는데, 깊이 복사를 실현할 수 있습니다. 다음과 같습니다.
public class CopyMap {
public static void main(String[] args) {
Map map = new HashMap();
map.put( "key1", 1);
Map mapFirst = new HashMap();
mapFirst.putAll(map); //
System. out.println(mapFirst);
map.put( "key2", 2);
System. out.println(mapFirst);
}
}
위와 같이 출력 결과는 다음과 같습니다.
{key1=1}
{key1=1}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
FTP의 액티브 모드 및 패시브 모드로그인에 성공한 후list 목록이나 데이터를 읽을 때 클라이언트는 랜덤으로 하나의 포트(1024 이상)를 개방하고 포트를 FTP 서버에 보내서 서버 클라이언트에게 주동 모드를 사용하고 개방하라고 알려준다 FTP 서버...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.