Java

[Java] 배열 Array, 복사 방법

junga 2022. 9. 4. 21:15
  • 동일한 자료형의 데이터를 연속된 공간에 저장하기 위한 자료구조이다.
  • 인덱스와 요소로 이루어져있으며 인덱스번호로 데이터에 접근이 가능하다.(index는 0부터 시작)
  • 반복문 등을 이용하여 계산과 같은 과정을 쉽게 처리할 수 있다.
// 배열 생성
자료형[] 변수 = new 자료형[배열길이]; 

// 배열 선언과 동시에 초기화
자료형[] 변수 = {데이터1, 데이터2, 데이터3, ...};
자료형[] 변수 = new 자료형[]{데이터1, 데이터2, 데이터3, ...};

배열 생성


public class Main {
    public static void main(String[] args) {
        int[] intArr = new int[4];
        System.out.println(intArr.length); // 4 -> 길이가 4인 배열이 생성됐다.
    }
}

길이로 생성한 배열은 어떤 요소를 가지고 있을까?

public class Main {
    public static void main(String[] args) {
        int[] intArr = new int[4];
        for (int i : intArr) {
            System.out.println(i);
        }
    }
}
// 0
// 0
// 0
// 0 -> 요소가 모두 0이다.

타입별 초깃값

http://www.tcpschool.com/java/java_array_oneDimensional


배열 선언과 동시에 초기화


public class Main {
    public static void main(String[] args) {
        int[] intArr = {1, 2, 3, 4};
        int[] intArr2 = new int[]{1, 2, 3, 4};
    }
}

두 방법의 차이는?

  • 이미 선언된 배열을 초기화해야할 경우 new 키워드를 써야한다.
public class Main {
    public static void main(String[] args) {
        int[] intArr = {1, 2, 3, 4};
        intArr = {5, 6, 7, 8}; // java: illegal start of expression 오류 발생

        intArr = new int[]{5, 6, 7, 8}; // new 키워드를 사용해야 오류 없음
    }
}

인덱스 접근

public class Main {
    public static void main(String[] args) {
       String[] strArr = new String[]{"a", "b", "c", "d"};
        System.out.println(strArr[0]); // 변수[인덱스번호]로 데이터 접근
        System.out.println(strArr[1]);
        System.out.println(strArr[2]);
        System.out.println(strArr[3]);
    }
}
// a
// b
// c
// d

배열 복사하기


  • 복사 방법엔 4가지 방법이 있다.

1. clone()

  • 기존배열.clone()으로 간결하게 기존 배열을 복사할 수 있다.
int[] arr1 = new int[] {1, 2, 3, 4, 5};
int[] arr2 = arr1.clone();

2. Arrays.copyOf()

  • 두 개의 인수를 받는다.
  • Arrays.copyOf(기존배열, 새배열길이)
  • 새 배열의 크기가 기존 배열보다 큰 경우 빈 인덱스는 0으로 체워진다.(int 기준)
int[] arr1 = {1, 2, 3, 4};
int[] arr2 = Arrays.copyOf(arr1, arr1.length);

3. System.arraycopy()

  • 기존 배열의 특정 요소부터 복사할 수 있다.
  • 새 배열의 특정 위치에서 복사를 시작할 수 있다.
  • System.arraycopy(기존배열, 기존배열인덱스, 새배열, 새배열인덱스, 복사할요소개수)
String[] arr1 = new String[]{"A", "B", "C", "D", "E", "F", "G"};
String[] arr2 = new String[arr1.length];

// 1. "B" ~ "F" 까지 복사해보자
System.arraycopy(arr1, 1, arr2, 0, 5);

for (int i = 0; i < arr2.length; i++) {
    System.out.printf("arr2[%d] : %s \n", i, arr2[i]);
}
// arr2[0] : B 
// arr2[1] : C 
// arr2[2] : D 
// arr2[3] : E 
// arr2[4] : F 
// arr2[5] : null 
// arr2[6] : null 


// 2. "B" ~ "F" 위치까지 일치하게 복사하기
System.arraycopy(arr1, 1, arr2, 1, 5); // 새배열인덱스 부분을 바꿔준다.

// arr2[0] : null 
// arr2[1] : B 
// arr2[2] : C 
// arr2[3] : D 
// arr2[4] : E 
// arr2[5] : F 
// arr2[6] : null 

4. for문을 통한 복사

int[] arr1 = new int[] {1, 2, 3, 4, 5};
int[] arr2 = new int[arr1.length];

for (int i = 0; i < arr1.length; i++) {
    arr2[i] = arr1[i];
}

'Java' 카테고리의 다른 글

[Java] 클래스 class  (0) 2022.09.06
[Java] 다차원 배열과 가변 배열  (0) 2022.09.05
[Java] 조건문 if, switch  (0) 2022.09.03
[Java] 증감 연산자, 삼항 연산자 사용법  (0) 2022.09.03
[Java] 타입 변환 Casting  (0) 2022.09.03