배열이란
배열은 같은 타입의 데이터(변수)를 연속된 공간에 나열시키고, 각 데이터에 인덱스(index)를 부여해 놓은 자료구조이다.
배열 선언
배열을 사용하기 위해서는 배열 변수를 선언해야 한다. 다음과 같이 두가지 형태로 작성할 수 있다.
타입[] 변수; 타입 변수[];
배열이름.length
대괄호 [ ]는 배열 변수를 선언하는 기호로 사용되는데, 타입 뒤에 붙을 수도 있고 변수 뒤에 붙을 수 있다.
타입은 배열에 저장될 데이터의 타입을 말한다. 다음은 각 타입별로 배열을 선언하는 예시이다.
int[] intArry;
double[] doubleArray;
String[] strArray;
배열 변수는 참조 변수에 속한다. 배열도 객체이므로 힙 영역에 생성되고 배열 변수는 힙 영역의 배열 객체를 참조하게 된다. 참조할 배열 객체가 없다면 배열 변수는 null 값으로 초기화될 수 있다.
타입[] 변수 = null;
배열 선언은 변수선언과 다르다. 변수는 선언하면 저장공간이 만들어지는데 배열은 선언하면 참조변수가 만들어진다.
int[] score; //int타입의 배열을 다루기 위한 참조변수 score선언
score = new int[5]; //int타입의 값 5개를 저장할 수 있는 배열 생성
스택 힙
※ 배열의 인덱스 - 각 요소에 자동으로 붙는 번호
※ 인덱스(index)의 범위는 0부터 '배열길이-1 까지
배열의 길이
배열의 길이란 배열에 저장할 수 있는 전체 항목 수를 말한다. 코드에서 배열의 길이를 얻으려면 다음과 같이 배열 객체의 length 필드를 읽으면 된다. 배열의 length필드를 읽기 위해서는 배열 변수에 도트(.) 연산자를 붙이고 length를 적어주면 된다. 배열은 한번 생성하면 그 길이를 바꿀 수 없다.
배열이름.length
int[] arr = new int[5]; //길이가 5인 int배열
int tmp = arr.length; //arr.length의 값은 5이고 tmp에 5가 저장된다.
값 목록으로 배열 생성
데이터타입[] 변수 = {값0, 값1, 값2, ..}; //배열의 선언과 생성을 동시에 해준다.
String[] names = {"철수", "민수", "짱구" };
배열의 범위를 벗어나면 오류가 발생한다. 배열의 길이를 나타내는 것은 .length로 나타낸다.
배열을 선언하고 생성을 한꺼번에 하는 절차는 배열 초기화이다.
배열의 출력
int[] iArr = {100, 95, 80, 70, 60};
System.out.println(iArr); //[I@14318bb와 같은 형식의 문자열이 출력
char[] chArr = {'a','b','c','d'};
System.out.println(chArr); //abcd가 출력
반복문으로 출력
public static void main(String[] args){
int[] iArr = {100, 95, 80, 70, 60}; //길이가 5인 int배열
for(int i = 0; i<iArr.length; i++){
System.out.println(iArr[i]);
}
}
배열의 iArr의 모든 요소를 출력한다.
System.out.println(Arrays.toString(iArr)); // [100, 95, 80, 70, 60]
▶java.util.Arrays 클래스
Arrays 클래스에는 배열을 다루기 위한 다양한 메소드가 포함.
Arrays 클래스의 모든 메소드는 클래스 메소드(static method)이므로, 객체를 생성하지 않고도 사용 가능
이 클래스는 java.util 패키지에 포함되므로, 반드시 import 문으로 java.util 패키지를 불러오고 나서 사용
숫자 섞기
public class Ex1 {
public static void main(String[] args) {
int[] numArr = {0,1,2,3,4,5,6,7,8,9,10};
System.out.println(Arrays.toString(numArr));
for(int i = 0; i<numArr.length; i++) {
int n = (int)(Math.random() * 10); //0~9
int tmp = numArr[i];
numArr[i] = numArr[n];
numArr[n] = tmp;
}
System.out.println(Arrays.toString(numArr));
}
}
로또 번호
package basic;
import java.util.Arrays;
public class Lotto {
public static void main(String[] args) {
int[] ball = new int[45];
for (int i = 0; i < ball.length; i++)
ball[i] = i + 1;
System.out.println(Arrays.toString(ball));
int tmp = 0;
int j = 0;
for (int i = 0; i < 6; i++) {
j = (int) (Math.random() * 45);
tmp = ball[i];
ball[i] = ball[j];
ball[j] = tmp;
System.out.println(Arrays.toString(ball));
}
for (int i = 0; i < 6; i++) {
System.out.printf("ball[%d]=%d%n",i, ball[i]);
}
}
}
2차원 배열
데이블 형태의 데이터를 저장하기 위한 배열이다. 행별 열수가 각각 다르게 만들 수 있다.
1차원 배열이 여러개 모인 것이 2차원 배열이다. 그리고 2차원배열이 여러개 모이면 3차원 배열이 된다 .
2차원 배열의 장점은 메모리를 효율적으로 쓸 수 있다.
아래 그림에서 보면 1차원 4개가 모여서 2차원 배열이 된 형태이다.
//2차원 배열
int twoArr[][] = new int[4][3];
System.out.println(twoArr.length); //행4
System.out.println(twoArr[0].length); //열3
4행 3열의 2차원 배열을 생성하는 선언 방식이다. 앞에 있는 인덱스는 행을 나타내고 뒤에 있는 인덱스는 열을 나타낸다. 12개의 데이터 저장공간이 만들어 진 것을 볼 수 있다.
2차원 배열의 인덱스
score[0][0] = 100; //배열 score의 1행 1열에 100을 저장
System.out.println(score[0][0]); //배열 score의 1행 1열의 값을 출력
4행 3열에 인덱스가 자동으로 붙는데 행인덱스의 범위는 4인경우에 0부터 4-1인 3까지이며
열인덱스는 0부터 3-1인 2까지이다.
행인덱스 : 0, 1, 2, 3
열인덱스 : 0, 1, 2
score[0][0] = 100; 을 하여 출력하면 값이 100이 나온다. 2차원 배열은 1차원 배열보다 인덱스 하나 더 사용한다는 것 빼고는 사용하는 것이 같다.
2차원 배열의 초기화
int[][] score = {
{100,100,100}, //[0]
{20,20,20}, //[1]
{30,30,30}, //[2]
{40,40,40} //[3]
}; //생성과 초기화
2차원 배열을 생성과 초기화를 동시해 한 코드이다. 이것을 아래 그림으로 보면 100, 100, 100 값이 들어있는 1차원배열이 있다. 1차원 배열들을 참조변수로 참조하고 있는 score[0]는 score[0], score[1], score[2], score[3] 또한 하나의 묶음으로 1차원 배열이 된다. 그렇기에 1차원 배열들을 묶고 있는 것을 2차원 배열이라고 한다.
'java' 카테고리의 다른 글
java_4_객체와 클래스 (메모리영역) 실습 (0) | 2021.10.12 |
---|---|
java_4_객체와 클래스 (메모리영역) 개념 (0) | 2021.10.12 |
java_ 3_ 반복문의 예외항목 (0) | 2021.10.09 |
java_ 3_반복문(do-while) (0) | 2021.10.08 |
java_ 3_ 반복문 (for, while, do-while문 ) (예제) (0) | 2021.10.08 |