배열이란?
배열이란 연관된 데이터를 하나의 변수에 그룹핑해서 관리하기 위한 방법이다.
즉, 배열은 하나의 변수에 여러 정보를 담을 수 있어 많은 정보를 효율적으로 처리할 수 있는 자료구조이다.
배열의 장점
- 검색 성능이 좋다 : 인덱스를 이용한 무작위 접근이 가능하므로 빠르다.
- 순차 접근의 경우에도 데이터를 하나의 연속된 메모리 공간에 할당하므로 연결 리스트보다 빠르다.
배열의 단점
- 자료의 삽입과 삭제에 비효율적이다 : 항목의 모든 요소를 이동시켜야해서 비효율적.
- 메모리 공간 낭비 : 배열은 메모리를 할당 받아 사용하기 때문에 데이터의 존재 유무와 상관없이 일정한 크기의 공간을 점유하고 있기 때문에 데이터를 삭제하더라도 배열 자체를 제거하지 않은 이상 낭비를 유발한다.
배열의 시간복잡도
접근 | 검색 | 입력 | 삭제 |
O(1) | O(n) | O(n) | O(n) |
※ 배열의 마지막 원소에 삽입, 삭제 삽입은 당연히 간단하게 끝내지만 (상수 시간) 아닌 경우. 즉, 시간 복잡도의 평균과 최악을 가정하여O(n)이라고 생각하면 될 것 같습니다.
Array과 ArrayList의 차이점
Array
- 통상적으로 말하는 자료구조 상의 배열.
- 고정 배열.
- 배열의 크기를 지정하며 그 크기 이상 데이터 삽입 시 불가.
- 배열의 사용하지 않는 인덱스가 있더라도 고정 크기이므로 메모리 낭비.
ArrayList
- 동적 배열.
- 자동적으로 크기가 지정되며 그 크기 이상 데이터 삽입 시 원래 크기의 1.5 ~ 2배 사이즈로 크기가 확장되며 삽입 가능.
- 배열의 사용하지 않는 인덱스가 있을 시 크기가 줄어들며 만약 인덱스 1의 데이터를 삭제 시 고정 배열은 1에 접근하였을 때 데이터가
없지만 동적 배열은 1에 접근하였을 때 2에 있던 데이터가 1로 가있어 데이터가 있다.
- Hash Map, Dictionary, Linked List로 구현되어 있다.
코드 예시
// 자바스크립트의 배열은 다른 데이터 타입을 배열안에 같이 넣을 수 있다.
// 다트의 배열은 타입 지정이 없을 시 다른 데이터 타입을 배열안에 같이 넣을 수 있다.
javascript
고정 배열
1. let arr = new Array(3);
동적 배열
1. let arr = [];
2. let arr new Array();
'자료구조' 카테고리의 다른 글
Deque란? (0) | 2022.06.27 |
---|---|
Queue란? (0) | 2022.06.27 |
Stack이란? (0) | 2022.06.27 |
연결리스트란? (단일 연결리스트, 이중 연결리스트, 원형 연결리스트) (0) | 2022.06.09 |