같은 타입의 변수들로 이루어져 있으며, 순서대로 나열한 선형 자료구조
- 각 원소는 배열에서 고유한 인덱스를 가진다.
- 인덱스를 사용하여 특정 위치의 원소에 접근할 수 있다.
O(1)의 시간복잡도를 가진다. - 고정된 크기(정적)를 가지며, 각 원소에 메모리상 연속적으로 저장된다.
[Code]
정수형 배열 선언과 초기화
int[] numbers = new int[5]; // 크기가 5인 정수형 배열 생성
// 문자열 배열 선언과 초기화
String[] names = new String[3]; // 크기가 3인 문자열 배열 생성
public class Main {
public static void main(String[] args) {
// 정수형 배열 선언과 초기화
int[] numbers = new int[5];
// 배열의 각 요소에 값 할당
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;
// 배열의 각 요소 출력
System.out.println("배열 요소 출력:");
for (int i = 0; i < numbers.length; i++) {
System.out.println("numbers[" + i + "] = " + numbers[i]);
}
}
}
배열 요소 출력:
numbers[0] = 10
numbers[1] = 20
numbers[2] = 30
numbers[3] = 40
numbers[4] = 50
장점
- 인덱스를 사용하여 특정 위치의 원소에 빠르게 접근 가능하다.
- 원소들이 연속적으로 메모리에 저장되기 때문에 캐시 지역성을 활용할 수 있다.
※ 기억 장치 내의 정보를 균일하게 Access하는 것이 아닌 어느 한 순간에 특정 부분을 집중적으로 참조하는 특성
단점
- 배열의 크기를 선언할 때 고정되며, 크기를 동적으로 조절할 수 없다.
- 크기를 변경하려면 새로운 배열을 만들어 데이터를 복사해야 한다.
- 크기가 고정되어 있어 배열을 선언할 때 최대 크기로 메모리를 할당받게 되는데,
만약 배열의 실제 크기가 최대 크기보다 작다면 메모리가 낭비된다. - 삽입, 삭제가 발생할 경우, 해당 위치 이후의 모든 원소를 이동시켜야한다.
이때 O(n)의 시간복잡도를 가진다.
[삽입, 삭제 Code]
public static void main(String[] args) {
int[] arr = new int[5];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
System.out.println("배열 초기 상태:");
for (int i : arr) {
System.out.print(i + " ");
}
System.out.println();
insertElement(arr, 25);
System.out.println("요소 삽입 후:");
for (int i : arr) {
System.out.print(i + " ");
}
System.out.println();
deleteElement(arr, 1);
System.out.println("요소 삭제 후:");
for (int i : arr) {
System.out.print(i + " ");
}
System.out.println();
}
// 요소 삽입을 항상 첫번째 인덱스로 하는 경우
static void insertElement(int[] arr, int element) {
// 삽입 위치 이후의 요소들을 오른쪽으로 이동
for (int i = arr.length - 1; i > 0; i--) {
arr[i] = arr[i - 1];
}
arr[0] = element;
}
static void deleteElement(int[] arr, int index) {
// 배열의 크기보다 작거나 같은 유효한 인덱스에만 삭제 가능
if (index < 0 || index >= arr.length) {
System.out.println("유효하지 않은 인덱스입니다.");
return;
}
// 삭제 위치 이후의 요소들을 왼쪽으로 이동
for (int i = index; i < arr.length - 1; i++) {
arr[i] = arr[i + 1];
}
// 마지막 요소는 삭제됨으로 초기화
arr[arr.length - 1] = 0;
}
'CS > Data Structure' 카테고리의 다른 글
복잡도 (0) | 2024.03.17 |
---|---|
Heap (0) | 2024.03.15 |
Stack & Queue (1) | 2024.03.14 |
LinkedList (0) | 2024.02.20 |