배열(Array)
특징
배열(Array)는 많은 수의 데이터를 다룰 때 사용하는 자료구조이며, 정말 자주 쓰이는 자료형이다.
하나의 블록에 데이터를 저장하며, 각각의 저장공간을 element, 위치를 가르키는 숫자를 인덱스(index)라고 한다.
각 데이터와 인덱스(index)가 1:1대응 하기 때문에 데이터에 대해 접근이 빠르다.(arr[0] > "a")
데이터가 메모리에 연속적으로 저장된다는 특징이 있다. (arr[0] > arr[1] ...arr[n])
단점
최대 길이를 정해놓고 사용해야한다. ( ex) int[] a = new int[3]; )
길이를 변경할 때는 새로운 배열을 만들어야하므로 가변적인 길이를 요구할 때는 적절하지 않다.
데이터를 삭제하면, 인덱스를 유지하기 위해 빈공간을 유지한다.
배열 선언 및 입출력
배열 선언
int[] numArr1;
numArr1 = new int[5];
int numArr2[];
numArr2 = new int[5];
int[] numArr3 = new int[5];
배열을 선언 할 때,
타입[] 변수이름; 혹은 타입 변수이름[]; 의 형식으로 선언을 한다.
선언 후 실제로 값을 저장하기 위해 변수이름= new 타입[크기]; 로 생성해준다.
혹은 한번에 타입[] 변수이름 = new 타입[크기]; 의 형태로 선언을한다.
배열 값 지정
int[] numArr = new int[5]; //길이가 5이고 빈공간인 int형 배열 선언
numArr[0] = 1; //각 공간에 값을 초기화
numArr[1] = 2;
numArr[2] = 3;
numArr[3] = 4;
numArr[4] = 5;
//반복문 사용
int[] numArr2 = new int[5]; //길이가 5이고 빈공간인 int형 배열 선언
for (int i = 0; i < 5; i++) { //5번 반복하여 0~4인덱스에 1~5의 값 지정
numArr2[i] = i+1;
}
처음 배열을 생성하면 기본값(0) 으로 할당 되어 있다.
그러므로 원하는 값을 지정해 준다.
배열은 길이가 정해져 있으므로, 반복문을 사용하는 것이 좋다.
배열 값 출력
int[] numArr = {1,2,3,4,5}; //길이가 5이고 빈공간인 int형 배열 선언
System.out.println(numArr[3]); //index 3의 값 하나 출력
array의 선언 및 출력이다.
하나의 값을 출력 시 numInt[3] 과 같이 배열[index번호] 를 적으면 된다.
만약, 배열 전체를 출력하고 싶을 때,
1. for문을 통해서 배열의 크기(배열.length)만큼 반복하여 출력해줄 수 있다.
2. for-each문을 통해서 자료형 변수에 배열의 요소를 하나씩 할당해 주어서 출력한다.
3. Arrays.toString(배열) 메소드를 이용해서 배열의 요소 전체를 String으로 출력한다.
int[] numArr = {1,2,3,4,5}; //길이가 5이고 빈공간인 int형 배열 선언
//반복문으로 출력
for (int i = 0; i < numArr.length; i++) { //numArr.length는 numArr의 길이
System.out.print(numArr[i] + " ");
}
System.out.println(); //한줄 내려주기
//for-each문으로 출력
for( int j : numArr) { //자료형 변수j에 numArr의 요소를 하나하나 대입
System.out.print(j + " ");
}
System.out.println(); //한줄 내려주기
//String으로 출력
System.out.println(Arrays.toString(numArr));
배열의 정렬기능
Arrays.sort()를 통해서 배열을 오름차순으로 정렬해 줄 수 있다.
일부분도 정렬이 가능하고, Collections.reverseOrder() 를 사용하면 내림차순으로도 정렬이 가능하다.
// 오름차순 정렬
int numArr[] = { 3,2,0,1,4 };
Arrays.sort(numArr); // 배열을 오름차순으로 정렬
System.out.println(Arrays.toString(numArr)); //해당 배열을 String으로 출력 [0,1,2,3,4]
// 내림차순 정렬
Integer numArr2[] = { 3,2,0,1,4 };
Arrays.sort(numArr2, Collections.reverseOrder()); // 배열을 내림차순으로 정렬, Collections 클래스의 reverseOrder() 함수를 사용
System.out.println(Arrays.toString(numArr2)); // [4,3,2,1,0]
// 배열 일부부만 정렬
int[] numArr3 = { 3,2,0,1,4 };
Arrays.sort(numArr3, 0, 3); // 배열 요소 0, 1, 2 만 정렬
System.out.println(Arrays.toString(numArr3)); // [0, 2, 3, 1, 4]
이차원 배열(Array)
2차원 배열은 행(row)과 열(column)로 구성된 테이블 형태의 배열이다.
그냥 쉽게 수학시간에 배웠던 행렬방식으로 데이터를 저장한다고 생각하면 된다.
방식은 1차원 배열 방식과 같지만, 대괄호([ ])를 한번씩만 더 써주면 된다.
선언 일 경우 int[][] numArr = new int[행길이][열길이]; 이렇게 만들어 주면 된다.
첫번째 대괄호가 행, 두번재 대괄호가 열을 나타낸다.
예를들어 int[2][3]; 라면 3크기의 배열이 2개 존재한다고 생각하면 편하다.
int[][] score = new int[2][3]; //2행 3열의 이차원 배열 생성
for (int i = 0; i < score.length; i++) { //행만큼 반복
for (int j = 0; j < score[i].length; j++) { //열만큼 반복
score[i][j] = i* score[i].length + j; //행값 * 열길이 + 해당 자리의 열값으로 0~5의 값을 할당
}
}
for (int i = 0; i < score.length; i++) { //행, 열만큼 반복하면서 값을 score의 값 모두 출력
for (int j = 0; j < score[i].length; j++) {
System.out.printf("행은 %d, 열은 %d의 값: %d" ,i,j, score[i][j]);
System.out.println();
}
}
간단한 예시로, 2행 3열의 2차원 배열을 만들고, 해당 자리에 0~5의 값을 하나씩 할당해 주었다.
'Code Test > 자료구조' 카테고리의 다른 글
자료구조 - [Java] 배열(Array) 사용 예시 (0) | 2023.05.06 |
---|