- 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
public static void main(String[] args) {
int[] arr; // 배열 선언
arr = new int[5]; // 5개의 int 값을 저장할 수 있는 공간 생성
}
public static void main(String[] args) {
int[] arr = new int[5];// 선언과 동시에 생성
}
ex)
score[3] = 100; / 배열 score의 4번째 요소에 100을 저장
int value = score[3]; / 배열 score의 4번째 요소의 값을 읽어 value에 저장
- index로 상수대신 변수나 수식도 사용할 수 있다!
for (int i=0; i < 5; i++) {
score[i] = i * 10;
}
int tmp = score[i+1];
유효한 범위의 값을 벗어난 값을 index로 사용하면 안된다!
-> 그 결과는 ERROR (ArrayIndexOutOfBoundsException)
int[] score = new int[5];
for (int i =0; i < score.length; i++) {
System.out.println(score[i]);
}
- 배열의 길이를 변경하는 법
(1) 더 큰 배열을 새로 생성
(2) 기존 배열의 내용을 새로운 배열에 복사
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};// 선언과 동시에 생성
}
int[] iArr = { 100, 95, 80, 70, 60};
for(int i =0; i < iArr.length; i++) {
System.out.println(iArr[i]);
}
int[] iArr = { 100, 95, 80, 70, 60};
for(int i =0; i < iArr.length; i++) {
System.out.print(iArr[i]+",");
}
System.out.println();
int[] arr = new int[5];
int[] tmp = new int[arr.length*2];
for(int i =0; i < arr.length; i++)
tmp[i] = arr[i];
arr = tmp;
이 작업은 비용이 많이 들기 때문에 배열의 길이를 넉넉하게 2배정도로 설정하는 것이 좋다.
2) System.arraycopy() 이용
배열의 복사는 for문보다 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개의 데이터를 복사
public static void main(String[] args){
int[] arr = {1,2,3,4,5};
int[] arr2 = arr; // 가능할까?
arr[2] = 100;
System.out.println(Arrays.toString(arr2));
}
> [1, 2, 100, 4, 5]
arr2도 같은 값을 가진다. 하지만 단순히 주소를 복사한 것이므로 arr, arr2는 같은 메모리 주소를 갖는다.
따라서 arr의 값을 바꾼다면 arr2에서 호출할 때 바뀐 값이 나온다.
배열을 다루기 위해 배열 자체의 메소드와 Arrays 객체의 메소드를 활용해서 사용한다.
public static void main(String[] args){
int[] arr = {1,2,3,4,5};
System.out.println(arr.length);
>> 5
}
public static void main(String[] args){
int[] arr = {1,2,3,4,5};
System.out.println(Arrays.toString(arr));
>> [1,2,3,4,5]
}
Arrays로 배열 다루기(메서드)
// toString, deepToString, equals, deepEquals
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
int[] arr2 = {1,2,3,4,5};
int[][] arr2D = {{1,2,},{3,4}};
int[][] arr2D2 = {{1,2,},{3,4}};
System.out.println("Arrays.toString(arr) : " + Arrays.toString(arr));
System.out.println("Arrays.equals(arr,arr2) : " + Arrays.equals(arr,arr2));
System.out.println("arr.equals(arr2) : " + arr.equals(arr2));
System.out.println("Arrays.deepToString(arr2D) : " + Arrays.deepToString(arr2D));
System.out.println("Arrays.deepEquals(arr2D, arr2D2) : " + Arrays.deepEquals(arr2D, arr2D2));
}
Arrays.toString(arr) : [1, 2, 3, 4, 5]
Arrays.equals(arr,arr2) : true
arr.equals(arr2) : false
Arrays.deepToString(arr2D) : [[1, 2], [3, 4]]
Arrays.deepEquals(arr2D, arr2D2) : true
배열의 주소가 아닌 배열의 값을 복사하는 방법
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
int[] arr2 = arr;
int[] arr3 = Arrays.copyOf(arr, arr.length);
System.out.println("arr = " + arr); // 같은 메모리 주소
System.out.println("arr2 = " + arr2); // arr와 같은 메모리 주소
System.out.println("arr3 = " + arr3);
arr[3] = 100;
System.out.println("arr[3] = " + arr[3]);
System.out.println("arr2[3] = " + arr2[3]);
System.out.println("arr3[3] = " + arr3[3]);
}
> arr = [I@28d93b30
> arr2 = [I@28d93b30
> arr3 = [I@1b6d3586
> arr[3] = 100
> arr2[3] = 100
> arr3[3] = 4
public static void main(String[] args) {
//String 메소드
String string = "ABCDE";
System.out.println("string.charAt(3) = " + string.charAt(3)); // 문자열에서 특정 인덱스 문자 구하기
System.out.println("string.substring(1,3) = " + string.substring(1,3)); // 문자열에서 특정 문자열을 인덱스 범위로 구하기
System.out.println("string.equals(\"ABCDE\") = " + string.equals("ABCDE")); // 문자열 비교
char[] charArr = string.toCharArray(); // 문자열에서 char배열로 바꾸기
System.out.println("charArr.toString() = " + charArr.toString());
System.out.println("string.toCharArray().toString() = " + string.toCharArray().toString());
}
>> string.charAt(3) = D
>> string.substring(1,3) = BC
>> string.equals("ABCDE") = true
>> charArr.toString() = [C@28d93b30
>> string.toCharArray().toString() = [C@1b6d3586
// 정렬
public static void main(String[] args) {
int[] arr = {3, 2, 5, 4, 1};
Arrays.sort(arr);
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
}
Arrays.toString(arr) = [1, 2, 3, 4, 5]
int[][] score = new int[4][3]; / 4행 3열의 2차원 배열
int[][] arr = {
{1,2,3},
{4,5,6}
};
for (int i = 0; i< score.length; i++) {
for (int j=0; j < score[i].length; j++) {
score[i][j] = 10;
}
}
예제 - 2차원 배열 score의 모든 요소의 합을 구하고 출력
for (int[] tmp : score) {
for (int i : tmp) {
sum += i;
}
}