배열이란?
같은 자료형끼리 묶어둔 것!
- 배열은 한 번 생성하면 그 길이를 바꿀 수 없다.
- 왜? 배열은 연속된 메모리 공간을 갖는다. 하지만 값을 바꾸면 메모리 공간을 연속되게 확보할 수 있다는 보장이 없기 때문이다.
- 그렇다면? 길이가 큰 배열을 새로 만들어서 값을 복사하면 된다.
배열 선언과 초기화
배열 선언과 초기화 (가능한 것과 불가능한 것 잘 알아두기!)
// 가능
int[] arr[];
int[] arr = {1, 2, 3};
int arr[] = {1, 2, 3, 4, 5};
int[] arr = new int[5];
int[] arr[] = new int[3][];
// 불가능
int[] arr = new int[5]{1, 2, 3, 4, 5}; // 초기화 할 때는 크기를 정할 수 없다.
int arr[5]; // 배열을 선언할 때는 크기를 지정할 수 없다.
int arr = new int[]; // 앞에 타입과 뒤 타입이 일치해야함. 앞타입에 int[]라고 해주어야함.
int[5] arr = new int[]; // 배열의 길이는 뒤에 선언해주어야 한다.
초기화 방법)
int[] score = new int[]{50, 60, 70, 80, 90}; // 방법 1
int[] score = {50, 60, 70, 80, 90}; // 방법 2. new int[]를 생략. 하지만 두 줄로 나누면 안됨.
=> 두 번째 방법으로 사용할 때는 꼭 한 줄로 써야한다. 두 줄로 나눠서 작성하면 오류가 발생한다!!
배열 출력
int[] arr = {100, 95, 80, 70, 60};
System.out.println(Arrays.toString(arr)); //출력 : [100, 95, 80, 70, 60]
배열 변수로만 출력은 불가능! for문을 사용하거나 Arrays.toString() 함수를 사용해야함.
but, char형 배열은 변수 이름만으로 출력 가능!
int[] iArr1 = {1, 2, 3, 4, 5};
int[] iArr2 = {10, 20, 30, 40, 50};
char[] chArr = {'a', 'b', 'c', 'd'};
System.out.println(iArr1); // [I@1d251891
System.out.println(Arrays.toStirng(iArr2)); // [10, 20, 30, 40, 50]
System.out.println(chArr); // abcd
=> int형 배열 변수를 이름만 출력하면 위와 같은 결과를 얻는다. 하지만 char형 배열 변수는 가능하다는 것을 할 수 있다.
Arrays로 배열 다루기
- 배열의 비교와 출력 - equals(), toString()
int[] arr = {0, 1, 2, 3, 4};
int[][] arr2D = {{11, 22}, {21, 22}};
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
System.out.println(Arrays.deepToString(arr2D)); // [[11,22], [21,22]]
String[][] str2D = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};
String[][] str2D2 = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};
System.out.println(Arrays.equals(str2D, str2D2)); // false
System.out.println(Arrays.deepEquals(str2D, str2D2)); // true
- 배열의 복사 - copyOf(), copyOfRange(), System.arrayCopy()
int[] arr = {0, 1, 2, 3, 4};
int[] arr2 = Arrays.copyOf(arr, arr.length); // arr2 = [0, 1, 2, 3, 4]
int[] arr3 = Arrays.copyOf(arr, 3); // arr3 = [0, 1, 2]
int[] arr4 = Arrays.copyOf(arr, 7); // arr4 = [0,, 1, 2, 3, 4, 0, 0]
int[] arr5 = Arrays.copyOfRange(arr, 2, 4); // arr5 = [2, 3] <- 4는 불포함
int[] arr6 = Arrays.copyOfRange(arr, 0, 7); // arr6 = [0, 1, 2, 3, 4, 0, 0]
* System.arrayCopy()
for(int i=0; i<num.length;i++){ newNum[i] = num[i] };
// 위 식은 아래 식과 같다.
System.arraycopy(num, 0, newNum, 0, num.length);
// num[0]에서 newNum[0]으로 num.length개의 데이터를 복사
- 배열의 정렬 - sort()
int[] arr = {3, 2, 0, 1, 4};
Arrays.sort(arr); // 배열 arr를 (오름차순)정렬한다.
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
'공부 > 자바' 카테고리의 다른 글
오버로딩(overloading) (0) | 2024.05.29 |
---|---|
객체 지향 프로그래밍(OOP) (0) | 2024.05.28 |
조건문과 반복문 (0) | 2024.05.25 |
연산자 (0) | 2024.05.24 |
상수와 리터럴 (0) | 2024.05.22 |