배열
자료형의 집합
- 같은 타입의 변수들로 이루어져있다.
- 크기가 정해져있다.
- 인접한 메모리 위치에 있는 데이터를 모아놓은 집합이다.
- 중복을 허용하고 순서(index)가 있다.
🐣 index는 0부터 시작한다.
시간 복잡도
여기서 설명하는 배열은 ‘정적 배열’을 기반으로 설명한다.
💬 정적 배열?
1
2
3
4
5
6
7
8
배열은 연속해있는 자료의 집합이며 각 자료는 번호를 가진다.
번호는 n개를 원소로 가지는 배열일 때 순서대로 0 ~ n-1의 번호를 가지며
프로그래밍 언어에 따라서 1~n개를 가지는 배열도 짤 수 있다.
배열의 크기가 한번 정해지면 배열의 크기를 바꿀수 없다
배열의 크기를 바꾸려면 배열을 동적할당으로 할당해야한다.
탐색에 O(1)이 되어 랜덤 접근(random access)이 가능하다.
삽입과 삭제에는 O(n)이 걸린다.
삽입하는데 걸리는 시간은 O(1) 이 되지만 이미 있던 데이터를 전부 밀어버려야 한다.
삭제 또한 하나를 삭제하면 그 공간만큼 당겨야 하므로 O(n)의 시간이 걸린다.
랜덤 접근과 순차적 접근
Random Access: 어떤 요소에 바로 접근하는 것
Sequential Access: 어떤 요소에 접근할 때, 처음부터 차례차례 접근하는 것
직접 접근이라고 하는 랜덤 접근은 동일한 시간에 배열과 같은 순차적인 데이터가 있을 때
임의의 인덱스에 해당하는 데이터에 접근할 수 있는 기능이다.
이는 데이터를 저장 된 순서대로 검색해야하는 순차적 접근과는 반대이다.
배열의 필요성
연관성 있는 데이터를 관리하기 편하다.
1
2
3
4
int student0 = 88;
int student1 = 72
...
int student99 = 96;
배열로 바꾸기
int[] scores = {88, 72, ..., 96};
코드로 보기
배열은 자료형 타입 바로 옆에 []
기호를 사용하여 표현한다.
ex) int[]
: int 자료형의 배열
String[] dogs = {"미니핀", "말티즈", "푸들", "포메"};
배열 생성
2가지가 있다.
생성과 동시에 초기화
int[] arr1 = {11, 22, 33, 44};
먼저 생성 후, 개별 초기화
1 2 3 4 5
int[] arr2 = new int[4]; arr2[0] = 11; arr2[1] = 22; arr2[2] = 33; arr2[3] = 44;
🐣 String[] weeks = new String[];
→ 길이에 대한 숫자값이 없으므로 컴파일 오류가 발생한다.
배열 사용법
배열 내 값들은 변수명에 인덱스(index)를 표기하여 접근할 수 있다.
ex) array[index]
배열의 길이는 length
를 통해 얻을 수 있다.
1
2
int arr3 = {10, 20, 30, 40, 50};
System.out.println(arr3.length);
ex)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 0: 자바, 1: 수학, 2: 과학, 3: 영어
double[] grades = {4.5, 3.5, 4.0, 3.0};
// 자바 점수 읽기
System.out.println("자바 = " + grades[0]); // 자바 = 4.5
// 자바 점수 변경
grades[0] = 4.0;
// 평균 구하기
double sum = 0;
for (int i = 0; i < grades.length; i++) {
sum += grades[i];
}
double avg = sum / grades.length; // 3.625 = 14.5 / 4
System.out.printf("평점: %.2f\n", avg); // 평점: 3.63
// %f : 실수형 출력
// %.2f : 소수점 둘째 자리 출력
출처
[면접을 위한 CS 전공지식 노트]
자바 배열이란?
01-자료구조: 배열(Array)->정적배열(Static Array)
03-06 배열 (Array)
[CS스터디] Array와 LinkedList