티스토리 뷰

배열 ( Array )

  • (같은 타입의) 여러 값을 효과적으로 관리하는 객체

  • 참조타입(mutable) : 주소값으로 변경됩니다.

  • new를 사용하지 않아도 객체 생성이 가능합니다.

  • index를 통해 값에 접근할 수 있습니다.

 

배열 선언하기 & 출력하기

1차원 배열

배열 선언하기

// 방법1
int[] a; // 선언
a = new int[5]; // 정의

// 초기화
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;


// 방법2
// 선언	정의		초기화
int[] b = new int[] { 6, 7, 8, 9, 10 };


// 방법3
// 선언 		초기화
int c[] = { 11, 12, 13, 14, 15, 16, 17 };

배열 출력하기

// 1차원 배열을 출력하는 메소드를 따로 만든 거에용
public static void prn(int[] arr) {
		
		for(int i = 0; i < arr.length; i++) {
			System.out.printf("%3d", arr[i]);
		}
}
// 방법 1
prn(c);
		
// 방법 2
System.out.println(Arrays.toString(c));

출력 결과

 

2차원 배열

배열 선언하기

// 방법 1
int[][] a = new int[3][2];

a[0][0] = 1;
a[0][1] = 2;
a[1][0] = 3;
a[1][1] = 4;
a[2][0] = 5;
a[2][1] = 6;


// 방법 2
int[][] b = new int[3][];

b[0] = new int[5];
b[1] = new int[7];
b[2] = new int[2];


// 방법 3
int[][] c = new int[][] { { 1, 2, 3 }, { 4, 5, 6, 7, 8 }, { 9 }, { 10, 11 } };


// 방법 4
int[][] d = { { 1, 2, 3 }, { 4, 5, 6, 7, 8 }, { 9 }, { 10, 11 } };

배열 출력하기

// 2차원 배열을 출력하는 메소드를 따로 만든거에용
public static void prn(int[][] arr) {

		for (int i = 0; i < arr.length; i++) {

			for (int j = 0; j < arr[i].length; j++) {

				System.out.print(arr[i][j] + " ");
			}

			System.out.println();
		}
	}
System.out.println(d); // 주소값이 출력됩니당.
// 방법 1
prn(d);

// 방법 2
System.out.println(Arrays.deepToString(d));

출력 결과

 

 

 

 

배열 복사하기

 

Shallow Copy : 주소값 복사

  • 배열의 주소값만 복사하는 것

  • 복사한 배열의 값을 바꾸면 original 배열의 값도 바뀝니다.

  • hashcode() 메소드로 주소값을 확인하면 두 배열이 같습니다.

int[] original = {10,20,30,40,50};

int[] copy = original;	// 배열 주소값만 복사하기!

copy[0] = 100;	// 같은 주소값이므로 둘다 값이 바뀜

// 배열 출력
System.out.println(Arrays.toString(original));
System.out.println(Arrays.toString(copy));
		
System.out.println(original==copy);	// true
	
System.out.println(original.hashCode());
System.out.println(copy.hashCode());	// 두 배열은 같은 주소값을 참조함

출력 결과

 

Deep Copy : 값 복사

  • 객체를 복사하여 새로운 객체에 연결, 값을 넘기는 것

  • 복사본을 변경해도 original에 영향 없습니다.

int[] original = {10,20,30,40,50};
		
// 방법 1 : 배열 인덱스의 값을 가져와서 복사하기
int[] copy1 = new int[original.length];
		
// 값만 복사하기!
for(int i=0; i<original.length; i++) {
		copy1[i] = original[i];
}
		
copy1[0] = 100;	// copy1[0]의 값만 100으로 바뀜
		
System.out.println(Arrays.toString(original));
System.out.println(Arrays.toString(copy1));
		
System.out.println(original == copy1);	// false
				
System.out.println("---------------------------------");
		
		
// 방법 2 : original한테 요청하여 복사하기
int[] copy2 = original.clone();
		
System.out.println(Arrays.toString(original));
System.out.println(Arrays.toString(copy2));
		
System.out.println(original == copy2);	// false
		
System.out.println("---------------------------------");

		
// 방법 3 : java.lang.System을 사용하여 복사하기
// System.arrayCopy(원본 배열 객체, 원본 시작위치, 복사 배열 객체, 복사 시작위치, 복사할 갯수);
int[] copy3 = new int[5];
		
Arrays.fill(copy3, 4);	// 원하는 값으로 배열 채우기 (안 하면 0으로 채워짐)
System.out.println(Arrays.toString(copy3));

System.arraycopy(original, 0, copy3, 2, 2);
		
System.out.println(Arrays.toString(original));
System.out.println(Arrays.toString(copy3));
		
System.out.println(original == copy3);	// false

출력 결과

 

최근에 올라온 글
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Total
Today
Yesterday