JAVA

Array 배열 복사의 4가지 방법

Lahezy 2023. 2. 10.
728x90

1. 새로운 배열 생성 후 포문으로 도는 방법    

for  : [1, 2, 3, 4, 5]

int[] arr = {1, 2, 3, 4, 5};

//1. for 문을 이용
int[] cpyArrFor = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
    cpyArrFor[i] = arr[i];
}
System.out.println("      for  : " + Arrays.toString(cpyArrFor));
System.out.println();

 

2. arr.clone()를 이용하는 방법

clone : [1, 2, 3, 4, 5]

//2. clone을 이용
int[] cpyArrClone = arr.clone();
System.out.println("     clone : " + Arrays.toString(cpyArrClone));
System.out.println();

 

3.System.arraycopy()를 이용하는 방법

System : [1, 2, 3, 4, 5]
System 범위 : [3, 4, 5, 0, 0]

public static native void arraycopy(Object src,  int  srcPos,Object dest, int destPos,int length);

src의 데이터를 srcPos부터 length의 길이만큼 dest의 destPos의 위치에 복사한다.

//3. System.arraycopy()를 이용
int[] cpyArrSystem = new int[arr.length];
System.arraycopy(arr, 0, cpyArrSystem, 0, cpyArrSystem.length);
System.out.println("    System : " + Arrays.toString(cpyArrSystem));
//3.1 System.arraycopy()의 범위 변경, arr의 데이터를 2부터 arr.length-2의 범위까지를 cpyArrSystem2의 0번째에 복사한다.
int[] cpyArrSystem2 = new int[arr.length];
System.arraycopy(arr, 2, cpyArrSystem2, 0, arr.length - 2);
System.out.println("System 범위 : " + Arrays.toString(cpyArrSystem2));
System.out.println();

 

4. Arrays.copyOf를 사용하는 방법

Arrays : [1, 2, 3, 4, 5]
Arrays 범위 : [1, 2, 3, 4]

//4. Arrays.copyOf
int[] cpyArrArrays = Arrays.copyOf(arr, arr.length);
System.out.println("    Arrays : " + Arrays.toString(cpyArrArrays));
//4.1 arr배열을 0부터 arr.length-1까지의 내용을 복사한다.
int[] cpyArrArrays2 = Arrays.copyOfRange(arr, 0, arr.length - 1);
System.out.println("Arrays 범위 : " + Arrays.toString(cpyArrArrays2));
System.out.println();

 

❓만약 배열사이즈를 변경하고 싶은 경우?

-> 1,2번을 사이즈가 큰 배열을 선언하고 활용하여 복사하면 된다. 

 

만약 2차원 배열이라면?, 참조형 변수라면(다른 선언한 클래스 객체들.. User, Player.. 직접 clone 해주어야 한다.)

-> clone을 이용하여 각 객체를 copy 해줘야 한다. 

-> 위에서 설명한 것은 참조변수가 아니고 기본자료형이기에 바로 복사가 가능하다.

//2차원 배열내용을 카피하는 방법 
int size = 5;
int[][] map = new int[size][size];
int[][] cpyMap = new int[size][size];

//cpyMap에 map의 내용을 카피하고 싶다면
for(int i=0;i<size;i++){
    cpyMap[i] = map[i].clone();
}

 

 

728x90

'JAVA' 카테고리의 다른 글

람다식(Lambda Expression)  (1) 2023.03.08
Enum 클래스  (0) 2023.02.28
ArrayList와 LinkedList  (0) 2023.02.24
오버로딩과 오버라이딩  (0) 2023.02.22
JAVA 자료형 범위  (0) 2022.10.03

댓글