array
배열의 정의
- 하나의 공간에 여러 개의 값을 담을 수 있는 개념, 대량의 데이터를 보관하고자 할 때 사용한다.
(하나의 공간에 하나의 값을 담을 수 있는 변수와는 차이가 존재한다.) - "같은 자료형의 값"만 담을 수 있다.
(int 배열에 char값을 담을 수 없다) - 인덱스(index)는 0부터 시작해 1씩 증가한다.
→ index[0] : 배열의 첫 번째 값
index[1] : 배열의 두 번째 값
index[2] : 배열의 세 번째 값
( = index[n]은 배열의 n+1번째 값.)
배열 선언
- [표현법] 자료형[ ] 배열이름; or 자료형 배열이름[ ];
▷int[ ] array;
배열 할당
- 배열에 몇 개의 값들을 보관할건지 크기를 지정하는 과정.
- 한 번 지정된 배열의 크기는 변경이 불가능하다.
(배열의 크기를 변경하고자 한다면 다시 만드는 수 밖에 없다.) - [표현법] 배열명 = new 자료형 [배열의크기(길이)];
▷ array = new int[5]; - 선언과 동시에 할당할 수도 있다.
▷ int[ ] array = new int[5]; - 배열 할당 시의 값은 인덱스의 값과 별개이다.
할당값은 "배열의 크기(몇 개나 들어갈지)"에 관한 것이고, 인덱스는 "배열에 담긴 값의 위치(어디에 들어갈지)"이다.
인덱스 초기화
- [표현법1] 배열명[인덱스] = (대입할 값);
▷ array[0] = 1;
array[1] = 2;
array[2] = 3; - 위의 경우, 한 번에 여러 인덱스의 값을 대입하여 초기화하는 것은 불가능하다.
- [표현법2] 자료형[ ] 배열이름 = { 대입할 값 };
▷ String[ ] strArr = {"가나다", "라마", "바사아자차카"}; - 위처럼 선언과 동시에 값을 대입하면 배열 할당을 따로 해주지 않아도 되며,
한꺼번에 모든 값을 입력(초기화) 가능하다. - 각 인덱스를 초기화하지 않아도 배열이 선언될 때, JVM이 기본값 (0 또는 null)으로 초기화를 진행한다.
배열 출력
- 필요한 인덱스의 값만 불러오거나, 출력할 때는 배열이름[인덱스]; 을 사용한다.
▷ int num = array[0];
System.out.println(array[1]); - 배열의 전체 값을 불러오거나, 출력할 때는 일반적으로 for문을 사용한다.
▷ for(int i = 0; i < array.length; i++) {
System.out.println(array[i]);
} - 배열이름.lenght : 배열의 길이를 정수값(int)으로 불러온다.
(※ 배열의 길이와 인덱스는 같은 [ ]에 들어있지만 다른 값이므로, 조건식에 사용할 때 주의하도록 한다.)
package e.array;
public class Array {
public static void main(String[] args) {
// 배열 선언, 할당
int[] iArray = new int[10];
// 인덱스 초기화
iArray[0] = 1;
iArray[1] = 2;
iArray[2] = 3;
iArray[3] = 4;
iArray[4] = 5;
iArray[5] = 6;
iArray[6] = 7;
iArray[7] = 8;
iArray[8] = 9;
iArray[9] = 10;
// 배열 출력
for(int i = 0; i < iArray.length; i++) {
System.out.printf("인덱스 %d의 값은 %d이다.\n", i, iArray[i]);
}
}
}
배열 복사
- for문을 활용한 방법
- 원본 배열과 같은 크기의 새로운 배열을 선언.
▷ int[ ] copy = new int[origin.length]; - 반복문을 통해 원본 배열의 값들을 새로운 배열에 대입.
▷ for(int i = 0; i < copy.length; i++) {
copy[i] = origin[i];
}
- 원본 배열과 같은 크기의 새로운 배열을 선언.
- clone( ) 사용
▷ int[] copy = origin.clone(); - arraycopy( ) 사용
: System.arraycopy(원본 배열, 복사 시작할 인덱스, 복사본 배열, 복사본 배열의 시작 인덱스, 복사할 개수);
▷ System.arraycopy(origin, 2, copy, 4, 3);
→ origin의 2번째 인덱스 값부터 5번째 인덱스까지의 값이 copy의 4번째 인덱스부터 순서대로 복사된다.
package e.array;
public class Array {
public static void main(String[] args) {
// origin
int[] origin = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
System.out.println("========== origin ==========");
for(int i = 0; i < origin.length; i++) {
System.out.print(origin[i] + "\t");
}
System.out.println("\n");
// for문을 사용하여, 짝수만 복사하기
int[] copy1 = new int[5];
for(int i = 0, j = 0; i < origin.length; i++) {
if(origin[i] % 2 == 0) {
copy1[j++] = origin[i];
}
}
System.out.println("========== 짝수만 복사하기 ==========");
for(int i = 0; i < copy1.length; i++) {
System.out.print(copy1[i] + "\t");
}
System.out.println("\n");
// clone()을 이용하여, origin을 전체 복사한 후,
// 새 배열을 선언하여 arraycopy로 복사한 배열의 5번째 값부터 3번째 인덱스에 10번째 값까지 복사하기
int[] copy2 = origin.clone();
int[] copy3 = new int[copy2.length];
System.arraycopy(copy2, 4, copy3, 3, 6); // 'n번째 인덱스'와 'n번째 값'을 주의할 것
System.out.println("========== clone + arraycopy ==========");
for(int i = 0; i < copy3.length; i++) {
System.out.print(copy3[i] + "\t");
}
}
}
2차원 배열
- 자료형이 같은 1차원 배열의 묶음으로, 배열 안에 다른 배열이 존재한다.
- 할당된 공간마다 인덱스 번호가 두 개 부여된다.
- 앞 번호 : 1차원 배열 인자 (행)
- 뒷 번호 : 1차원 배열의 index 값 (열)
- [표현법] 자료형[ ][ ] 배열명 = new 자료형[n][m];
▷ String[ ][ ] array = new String[2][3];
→ length가 3인 1차원 배열이 2개 들어있는 2차원 배열 - 대입 시에는 인덱스 번호 두 개를 모두 써야 한다.
▷ String[0][0] = "ABCED";
String[0][1] = "FGHI"; - 선언과 동시에 할당할 때는 { { }, { } } 식으로 묶어준다.
▷int[ ][ ] intArr = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10} }; - 1차원 배열의 참조 변수 묶음 먼저 생성할 수도 있다.
(1차원 배열의 길이가 일정치 않을 때 주로 사용한다.)
▷ char[ ][ ] chArr = new char[3][ ];
chArr[0] = new char[3];
chArr[1] = new char[5];
chArr[2] = new char[2];
package e.array;
public class Array {
public static void main(String[] args) {
// 2차원 배열 이해하기
String[][] strArr = new String[3][3];
String[0][0] = "(1행 1열)";
String[0][1] = "(1행 2열)";
String[0][2] = "(1행 3열)";
String[1][0] = "(2행 1열)";
String[1][1] = "(2행 2열)";
String[1][2] = "(2행 3열)";
String[2][0] = "(3행 1열)";
String[2][1] = "(3행 2열)";
String[2][2] = "(3행 3열)";
for(int i = 0; i < strArr.length; i++) {
for(int j = 0; j < strArr[i].length; j++) {
System.out.print(strArr[i][j] + "\t");
}
System.out.println();
}
System.out.println();
// 1차원 배열의 길이가 다른 2차원 배열 이해하기
char[][] chArr = {
{'가', '나', '다', '라', '마', '바', '사', '아', '자', '차', '카', '타', '파', '하'},
{'아', '야', '어', '여', '오', '요', '우', '유', '으', '이'}
};
for(int i = 0; i < chArr.length; i++) {
for(int j = 0; j < chArr[i].length; j++) {
System.out.print(chArr[i][j] + "\t");
}
System.out.println();
}
}
}
'JavaStudy' 카테고리의 다른 글
d.loop (1) | 2024.07.05 |
---|---|
c.control (0) | 2024.07.04 |
b.operator (0) | 2024.07.03 |
a.basic (1) | 2024.07.01 |