같은 타입의 변수를 하나의 묶음으로 다루는 것
'묶음'이기 때문에 메모리상 연속되어 배치된다.
원하는 타입의 변수를 선언하고 변수 또는 타입에 배열임을 의미하는 대괄호[]를 붙이면 된다.
int[] score;
String[] name;
//타입[] 변수이름
int score[];
String name[];
//타입 변수이름[]
배열을 선언한 다음에는 배열을 생성해야 한다.
배열을 생성해야만 값을 저장할 수 있는 공간이 비로소 만들어진다.
연산자 new와 함께 배열의 타입과 길이를 지정해 주어야 한다.
int[] score = new int[5];
//타입[] 변수이름 = new 타입[길이]; // 배열의 선언과 생성을 동시에
배열의 요소마다 붙여진 일련번호
각 요소를 구별하는데 사용된다.
1이 아닌 0부터 시작하기 때문에, 0부터 배열길이 -1까지가 인덱스의 범위다.
for문과 병행해서 사용할시, index로 상수 대신 변수나 수식으로도 사용할 수 있다.
score[0]=0;
score[1]=10;
score[2]=20;
....
//index와 for문을 사용해 인덱스를 변수 취급
for(int i=0;i<4;i++)
{
score[i]=i*10;
}
당연히 배열의 길이는 양수여야 하지만, 길이가 0인 배열을 만들 수도 있다.
배열의 길이는 length메서드를 이용해 추출할 수 있다.
배열의 길이를 변경하는 법?
- 더 큰 배열을 새로 생성한다.
- 기존 배열의 내용을 새로운 배열에 복사한다.
배열은 생성과 동시에 자동적으로 자신의 타입에 해당되는 기본값으로 초기화된다
하지만 원하는 값을 저장하려면 각 요소마다 값을 지정해줘야한다.
하지만ㄴ 자바에서는 배열의 생성과 초기화를 동시에 할 수 있는 방법을 제공한다.
int[] score = new int[] {50,60,70,80,90};
int[] score = {50,60,70,80,90} // new int[]를 생략할 수도 있음
참고로 new연산자의 경우는 배열과 생성을 따로 하는 경우에는 생략이 불가능하다.
배열에 저장된 값을 확인할 때에도 for문을 사용하면 된다.
더 간단하게는 Arrays.toString(배열이름) 메서드를 사용하면 편하다.
배열을 복사하는데에는 두 가지 방법이 있다.
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;
System.arraycopy(num, 0, newNum, 0, num.length);
//num[0]에서 newNum[0]으로 num.length개의 데이터를 복사
앞서int타입의 배열을 살펴보았다.
배열은 int타입 뿐만 아니라 String,char타입으로도 선언이 가능하다.
여태까지 다룬 배열은 1차원 배열이다.
2차원 이상의 배열을 다차원 배열이라고 한다.
1차원 배열과 선언방법은 같으나, 괄호 하나[]가 더 들어갔으며,
인덱스 표현시에도 []를 하나 더 붙인다.
int[][] score = new int[4][3];
System.out.printf(socre[2][3]);
1차원 배열의 초기화에서 괄호 {} 한 번을 더 써서 행별로 구분해준다.
int[][] arr={
{1,2,3},
{4,5,6}
};
앞서 선언한 2차원 배열이 반듯한 직사각형 모양인 반면,
각 행에 달려있는 배열의 길이를 각자 다르게 설정할 수도 있다.
int[][] score = new int[3][];
socre[0] = new int[4];
score[1] = new int[3];
score[2] = new int[5];
///1행에는 크기가 4인 itn배열이, 2행에는 3크기의 배열이, 3행에는 5크기의 배열이