자바
[자바] 배열
j9972
2022. 6. 28. 12:02
728x90
배열
배열 - 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
배열의 선언 및 생성
타입[] 변수이름 = new 타입[길이];
int[] score = new int[5];
String[] name = new String[3];
배열의 생성 및 초기화
// 배열의 생성과 동시에 초기화 하는 방법
example
int[] score = new int[]{ 50, 60, 70, 80, 90 }
// 위와 같이, 배열의 생성하면서 동시에 초기화를 하면 { }안의 값의 개수에 의해 배열의 길이가 자동으로 결정된다.
// 더 간단하게 선언하는 방법 -> new int[] 생략가능
int[] score = { 50, 60, 70, 80, 90 }
// 배열의 선언과 생성을 따로 하면 new int[] 생략 불가능하다
int[] score;
score = { 50,60,70 }; // 불가능
// 매개변수로 int배열을 받는 add 메소드
int add(int[] arr) { }
int result = add(new int[] { 100, 90, 80 }); // OK
int result = add({ 100, 90, 80 }); // err
// 길이가 0인 배열
int[] score = new int[0];
int[] score = new int[]{};
int[] score = {};
주의 할점
int[] score;
score = {50,60} // error
int[] score;
score = new int[]{50,60} // right
- 배열의 유효한 범위를 넘어선 index를 사용하면, ArrayIndexOutOfBoundsException 이 발생하므로 주의
배열의 길이
배열의 길이는 int범위의 양의 정수 ( 0도 포함 ) 이어야 한다.
배열이름.length
int[] arr = new int[5]
int tmp = arr.length // 5
- 배열의 길이는 고정적이므로 변경하지 못한다
int[] arr = new int[5];
arr.length = 10; // 불가능
배열의 길이 변경하는 방법
1. 더 큰 배열을 새로 생성
2. 기존 배열의 내용을 새로운 배열에 복사한다
배열의 출력
for문을 사용한 방법
int[] iArr = { 100, 90, 80 };
for(int i = 0; iArr.length; i++ ) {
System.out.println(iArr[i]);
}
// 여러줄에 출력말고 출력 ( 줄바꿈 없이 )
int[] iArr = { 100, 90, 80 };
for(int i = 0; iArr.length; i++ ) {
System.out.print(iArr[i]);
}
Array.toString( 배열이름 )을 사용한 방법
int[] iArr = { 100, 90, 80 };
System.out.println(Arrays.toString(iArr));
// 배열을 가리키는 참조변수 iArr을 출력하는 경우
System.out.println(iArr);
// 타입@주소( 주소는 16진수이다 - 배열의 주소임 )
배열의 복사
System.arraycopy()
배열의 복사는 arraycopy() 사용하기
지정된 범위의 값들을 한번에 통째로 복사하기에 for문을 쓰는 것보다 효율적이다.
// for
for(int i = 0; i < num.length; i++ ) {
newNum[i] = num[i]
}
// arraycopy
System.arraycopy(num, 0, newNum, 0 , num.length);
// num[0]에서 newNum[0]으로 num.length개의 데이터 복사
// 주의 ) 복사하려는 배열의 위치가 적절하지 못하여 복사하려는 내용보디 여유공간이 적으면 에러
for - each
String[] members = {"진혁", "진구", "혁진" };
for(String e: members) {
System.out.orintln(e)
}
String 배열
String클래스는 char배열에 기능(메서드)를 추가한것이다.
다차원 배열
다차원 배열은 1차원 배열과 같은데, 다만 [] 가 하나 더 들어갈 뿐이다.
선언방법 | 선언 예 |
타입[][] 변수이름; | int[][] score; |
타입 변수이름[][]; | int score[][]; |
타입[] 변수이름[]; | int[] score[]; |
예시)
int[][] score = new int[4][3]; // 4행 3열
4행 3열
1행1열(int니까 기본값 0) | 1행2열(int니까 기본값 0) | 1행3열(int니까 기본값 0) |
2행1열(int니까 기본값 0) | 2행2열(int니까 기본값 0) | 2행3열(int니까 기본값 0) |
3행1열(int니까 기본값 0) | 3행2열(int니까 기본값 0) | 3행3열(int니까 기본값 0) |
4행1열(int니까 기본값 0) | 4행2열(int니까 기본값 0) | 4행3열(int니까 기본값 0) |
초기화
int[][] arr = new int[][]{ {1,2,3}, {4,5,6} };
int[][] arr = { {1,2,3}, {4,5,6} };
2차원 배열 score의 모든 요소 합 구하는 방법
for(int[] tmp: score) {
for(int i : tmp ) {
sum += i;
}
}
가변 배열
가변배열은 2차원 배열이랑 비슷하지만, 각 행들의 길이가 다르다
int[][] score = new int[5][3] // 5행 3열
// way1
int[][] score = new int[5][]; // 2번째 차원의 길이를 정하지 않는다 ( 열의 길이 정하지 않음 )
score[0] = new int[3]; // 첫번째 행에 대해서 열의 길이가 3이다
score[1] = new int[3];
score[2] = new int[3];
score[3] = new int[3];
score[4] = new int[3]; // 5번째 행에 대해서 열의 길이도 3이다
// way2
int[][] score = new int[5][]; // 2번째 차원의 길이를 정하지 않는다 ( 열의 길이 정하지 않음 )
score[0] = new int[4]; // 1번째 행에 대해서 열의 길이가 4이다
score[1] = new int[3]; // 2번째 행에 대해서 열의 길이가 3이다
score[2] = new int[2]; // 3번째 행에 대해서 열의 길이가 2이다
score[3] = new int[2]; // 4번째 행에 대해서 열의 길이가 2이다
score[4] = new int[3]; // 5번째 행에 대해서 열의 길이도 3이다