본문 바로가기
JAVA

배열 복사 (ArrayCopy) 기본 예제

by 선우진우 2024. 1. 20.
728x90
반응형

 

package com.kh.array;

import java.util.Arrays;

public class B_ArrayCopy {

	// 얕은 복사 : 배열의 주소만 복사 
	// 깊은 복사 : 새로운 배열을 생성하여, 기존 배열 내부의 값을 그대로 복사
	
	
	public void method1() {
		
		// 얕은 복사 예제
		int[] origin = {1, 1, 1, 1, 1};
		
		System.out.println("origin 출력");
		for(int i = 0; i < origin.length; i++) {
			System.out.print(origin[i] + " "); // 1 1 1 1 1
		}
		
		System.out.println();
		
		
		// arrCopy에 origin이 참조 하고 있는 주소 값 복사
		int[] arrCopy = origin;
		System.out.println("arrCopy 출력");
		for(int i = 0; i < origin.length; i++) {
			System.out.print(origin[i] + " "); // 1 1 1 1 1
		
		}
		
		System.out.println();
		
		
		
		// arrCopy[2]의 값을 99로 변경
		System.out.print("arrCopy[2]의 값을 99로 변경");
		arrCopy[2] = 99;
		
			
		// arrCopy 값 변경 확인
		System.out.println("arrCopy 출력");
		for(int i = 0; i < arrCopy.length; i++) {
			System.out.print(arrCopy[i] + " "); // 1 1 99 1 1
			
		}
		System.out.println();
			
		
		// origin 확인
		System.out.println("origin 출력");
		for(int i = 0; i < origin.length; i++) {
				System.out.print(origin[i] + " "); // 1 1 99 1 1		
		}
		System.out.println();
		
		System.out.println("origin : " + origin);
		System.out.println("arrCopy : " + arrCopy);
	}
	
	
	
	public void method2() {
		
		// 깊은 복사 
		// 기존 배열 복제
		
		int[] origin = {1, 1, 1, 1, 1};
		
		int[] arrCopy = new int[origin.length]; // origin 만큼의 메모리 공간 할당
		
		// 값 자체를 복사 (깊은 복사)
		for(int i = 0; i < origin.length; i++) {
			arrCopy[i] = origin[i];
					
		}
				
		//origin 출력
		System.out.println(" origin 출력");
		for(int i = 0; i < arrCopy.length; i++) {
			System.out.println(origin[i]);
		
			System.out.println();
		}
			
		// arrCopy 값 변경 확인
			
		System.out.println("arrCopy 출력");
		for(int i = 0; i < arrCopy.length; i++) {
			System.out.print(arrCopy[i]);
		}
		System.out.println();
		
		
		//origin 확인
		
		System.out.println("origin 출력");
		for(int i = 0; i < origin.length; i++) {
			System.out.print(origin[i]);
		}
		
		System.out.println();
		
		System.out.println("origin : " + origin);
		System.out.println("arrCopy : " + arrCopy);
	
	}
		

	
	public void method3() {
		
		// System.arraycopy() 사용하기
		
		// System.arraycopy(  src 	/		 srcPos              /		dest		   /	 destPos		   / 	length);
		// System.arraycopy(원본배열명  / 원본배열에서 복사를 시작할 위치(인덱스)  / 복사할 배열명(arrCopy)  / 복사 배열에서 복사가 시작 될 위치  / 원본 배열에서 복사할 길이);
		//					 origin				1						arrCopy2				2					 3
		
		int[] origin = {1, 2, 3, 4, 5};
					//  0, 1, 2, 3, 4 index 번호.
		int[] arrCopy = new int[10];
		
		System.arraycopy(origin, 0, arrCopy, 0, origin.length); // origin 0번에서 arrCopy 0번을 origin의 길이만큼 복사하겠다.
		
		
		for(int i = 0; i < arrCopy.length; i++) {
		System.out.print(arrCopy[i] + " ");
		}
		
		System.out.println();
		
		
		
		
		// 0 0 2 3 4 0 0 0 0 0
		int[] arrCopy2 = new int[10];
		
		System.arraycopy(origin, 1, arrCopy2, 2, 3); // origin index 1번에서 부터 arrCopy2 2번 index에 3개를 복사.
		System.out.println("System.arraycopy(origin, 1, arrCopy2, 2, 3)");
		for(int i = 0; i < arrCopy2.length; i++) {
			System.out.print(arrCopy2[i] + " ");
		
		}
		System.out.println();
		
	}
	
	
	public void method4() {
		
		// Arrays.copyof()
		// * Arrays 클래스 : 배열을 유용하게 사용 할 수 있게 기능을 제공해 주는 클래스
		
		int[] origin = {1, 2, 3, 4, 5};
		
		int[] arrCopy = Arrays.copyOf(origin, origin.length);
		System.out.println( Arrays.toString(arrCopy) );
		
		int[] arrCopy2 = Arrays.copyOf(origin, 10);
		System.out.println( Arrays.toString(arrCopy2) );

	}
	
		
	
}



 
 

 

728x90
반응형