티스토리 뷰
배열 ( 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
'JAVA > 이론' 카테고리의 다른 글
[JAVA] [디자인패턴] 싱글톤 패턴 ( Singleton Pattern ) (0) | 2019.11.27 |
---|---|
[JAVA] static 변수와 static 메소드 (0) | 2019.11.27 |
[JAVA] method (메소드 / 메서드) - public , protected , default , private , static , non-static (1) | 2019.11.18 |
[JAVA] 형 변환 - 묵시적 형 변환 , 명시적 형 변환 (0) | 2019.11.18 |
[JAVA] Type - 변수 , 자료형 , 타입 (0) | 2019.11.18 |