JAVA 배열 복사, 출력

KSOJIN·2023년 6월 20일
0

taxcare

목록 보기
5/10
post-thumbnail

JAVA 배열

▼ JAVA에서 배열은 값이 저장된 메모리의 주소값을 가지고 있는 참조형 변수이다.

int[] a = new int[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
System.out.println(a[1]);// 2
System.out.println(a);// @2353b3e6 => 주소값
System.out.println(Arrays.toString(a));// [1, 2, 3]
  • 배열을 출력할 때
    1차원 배열 : Arrays.toString()
    다차원 배열 : Arrays.deepToString()

▼ 그래서 배열변수 자체를 '='으로 복사하면 주소값이 복사되므로 복사본을 변경했을 때 원본도 같이 변경된다.

int[] a = {1, 2, 3};
int[] b = null;
b = a; // 얇은 복사 (주소값 복사)
System.out.println(Arrays.toString(b));// [1, 2, 3]
b[1] = 20;
System.out.println(Arrays.toString(a));// [1, 20, 3]

▼ 때문에 값을 일일이 대입해주거나 JAVA에서 제공하는 다양한 메서드를 이용해 깊은 복사를 해야한다.

int[] a = {1, 2, 3};
int[] b = new int[3];
for(int i=0; i<a.length; i++) b[i] = a[i];// 깊은 복사
b[1] = 99;
System.out.println(Arrays.toString(a));// [1, 2, 3]
System.out.println(Arrays.toString(b));// [1, 99, 3]

▼ 깊은 복사 메서드

int[] a = {1, 2, 3};
int[] b = a.clone();// 전체 복사
int[] c = Arrays.copyOf(a, 3);// 시작점부터 원하는 길이만큼 복사
int[] d = copyOfRange(a, 1, 3);// 시작점도 지정할 수 있음

▼ 제일 많이 사용했던 System.arraycopy( A, startIdx, B, destIdx, len );

🐥원하는 인덱스에 필요한 값만 복사하고 싶을 때

  • Object A : 복사할 배열
  • int startIdx : 복사할 배열(A)의 시작 index
  • Object B : 복사될 배열
  • int destIdx : 복사될 곳(B)의 시작 index
  • int len : 복사할 길이(개수)
int[] a = {1, 2, 3, 4, 5};
int[] b = new int[6];
System.arraycopy(a, 1, b, 2, 3);
System.out.println(Arrays.toString(b));// [null, null, 2, 3, 4, null]

0개의 댓글