배열이란, 동일한 타입의 값들을 하나의 묶음으로 묶은 자료 구조를 의미한다.
가장 일반적인 배열의 형태이다.
String [] food;
food = new String [10]; //10개의 String형 값을 저장할 수 있는 배열이 생성된다.
-------------------------------------------------------------------------------
String [] food = new String [10]; //으로도 생성할 수 있다.
이때 배열의 모근 요소는 선언한 타입으로 초기화되어있다. ex) int -> 0, double -> 0.0 등등...
대입 연산자(=)에 의해 생성된 배열 첫번째 요소의 주소값이 참조변수 food에 할당되어 참조 변수 food는 배열의 맨 첫번째 요소를 가리킨다.
자바에서 배열은 참조타입에 해당한다. 따라서 배열 선언 문법으로 선언한 food는 선언 이후에 생성될 배열의 주소값을 담은 참조 변수가 된다.
배열에 실제 값을 넣어서 초기화하려면
String [] food = new String [] {"마라탕", "떡볶이", "햄버거", "중국당면",...};
//선언과 초기화를 하나의 문장으로 할 때에 한하여 new String[] 을 생략할 수 있다.
String [] food = {"마라탕", "떡볶이", "햄버거", "중국당면",...};
배열의 각 요소가 또 다른 배열인 구조이다. (1차원 배열과 크게 다르지 않다.)
int[][] kcal;
kcal = new int[31][3];
----------------------------------------------------------------------
int[][] kcal = new int[31][3]; //으로도 생성할 수 있다.
2차원 배열의 내부 배열은 0을 3개씩 저장하고, 외부 배열은 내부배열 {0,0,0}을 31개 저장하고있다.
내부 배열은 3개의 0을 요소로 가지지만, 외부 배열의 각 요소는 내부 배열의 주소값을 저장하고 있다.
값을 넣을 때는
int[][] kcal = new int[][] {
{ 1111, 1234, 2133 },
{ 2234, 2661, 2438 },
...
};
// 선언과 초기화를 하나의 문장으로 할 때에 한해 new int[][]를 생략할 수 있다.
int[][] kcal = {
{ 1111, 1234, 2133 },
{ 2234, 2661, 2438 },
...
};
배열이 2차원 이상일 때, 마지막 차수에 해당하는 배열의 길이를 고정하지 않아도 되며, 이런 배열을 가변배열이라고 한다.
int[][] num = new int[3][]; //외부 배열만 생성된 상태이다.
----------------------------------------------------------------------
int[][] num = new int[3][];
System.out.println("Arrays.toString(num) = " + Arrays.toString(num));
// 결과
// Arrays.toString(num) = [null, null, null]
내부 배열을 생성하려면 new int[]를 사용해서 외부 배열의 각 요소에 할당해주면 된다.
int[][] num = new int[3][];
num[0] = new int[4];
num[1] = new int[5];
num[2] = new int[6];
System.out.println("Arrays.toString(num[0]) = " + Arrays.toString(num[0]));
System.out.println("Arrays.toString(num[1]) = " + Arrays.toString(num[1]));
System.out.println("Arrays.toString(num[2]) = " + Arrays.toString(num[2]));
// 결과
// Arrays.toString(num[0]) = [0, 0, 0, 0]
// Arrays.toString(num[1]) = [0, 0, 0, 0, 0]
// Arrays.toString(num[2]) = [0, 0, 0, 0, 0, 0]
가변 배열도 일반적인 배열처럼 생성과 동시에 초기화가 가능하다.
int[][] num = {
{ 1, 2, 3, 4 },
{ 11, 22, 33, 44, 55 },
{ 111, 222, 333, 444, 555, 666},
};
System.out.println("Arrays.toString(num[0]) = " + Arrays.toString(num[0]));
System.out.println("Arrays.toString(num[1]) = " + Arrays.toString(num[1]));
System.out.println("Arrays.toString(num[2]) = " + Arrays.toString(num[2]));
// 결과
// Arrays.toString(num[0]) = [1, 2, 3, 4]
// Arrays.toString(num[1]) = [11, 22, 33, 44, 55]
// Arrays.toString(num[2]) = [111,222, 333, 444, 555, 666]
int[] scores = { 100, 90, 85, 95, 100 };
// 일반적인 for문 및 while문을 사용하면 배열 요소의 값을 바꿀 수 있습니다.
for (int i = 0; i < scores.length; i++) {
scores[i] = 0;
}
System.out.println("for문 사용 : " + Arrays.toString(scores));
int j = 0;
while (j < scores.length) {
scores[j++] = 1;
}
System.out.println("while문 사용 : " + Arrays.toString(scores));
// 향상된 for문을 사용하면 배열 요소의 값을 바꿀 수 없습니다.
for (int score: scores) {
score = 2;
}
System.out.println("향상된 for문 사용 : " + Arrays.toString(scores));
/*
실행 결과
for문 사용 : [0, 0, 0, 0, 0]
while문 사용 : [1, 1, 1, 1, 1]
향상된 for문 사용 : [1, 1, 1, 1, 1]
*/
1) 배열의 길이를 얻고싶을 때
배열참조변수_이름.length
ex) System.out.println(food.length); // 10
2) 배열의 요소를 알고싶을 때
Arrays.toString()
ex) double[] value = {3.0, 1.3, 7.2};
System.out.println(value.toString()); // [D@46a49e6 같은 값이 나온다.
System.out.println(Arrays.toString(value)); // [3.0, 1.3, 7.2] 이 출력된다.