본문 바로가기
Java.APS/APS.Algorythm

[APS] 005 : 자료구조 - 동적 배열

by 개발자 아구몬 2023. 4. 11.

동적 배열


동적 배열(Dynamic Array)

 - 동적 할당(dynamic allocate)를 통해, 크기를 변경할 수 있도록 한 배열의 일종

  • index를 이용한 데이터 접근이나 탐색과 같은 배열의 형태와 장점을 그대로 유지
  • 내부적으로 배열로 구현되는 경우가 많아 캐시 메모리 적중률 이 높음
◆ 동적 할당(dynamic allocate)
컴파일 단계에서 크기를 미리 정해주는 배열과는 달리, 런타임 단계에서 크기에 따라 메모리를 가변적으로 배치하는 것을 의미한다. Java는 모든 객체의 메모리값을 JVM이 동적 할당해준다.

동적 배열과 복잡도

1. 시간복잡도

 - 접근 / 변경 : O(1)

  • 인덱스를 이용해 해당 데이터에 바로 접근하고 변경할 수 있음

 - 삽입 / 삭제 O(1) ~ O(n)

  • 동적배열의 크기를 초과하지 않는다면 배열과 동일함 (맨끝 O(1) / 중간 O(n))
  • 만약 사이즈를 초과하면 새로운 배열을 할당한 뒤 값을 복사하는 과정이 일어나므로 O(N) 소요

2. 공간복잡도

 - O(N) : 동적 배열은 별다른 추가 메모리(Overhead)공간을 필요로 하지 않음



Java 동적 배열


ArrayList / Vector

- Java는 List 인터페이스를 상속받는 ArrayList Vector 클래스로 동적 배열을 구현하고 있음

List<Integer> list = new ArrayList<>();
List<Integer> list2 = new Vector<>();
// 1차원 동적 배열의 선언

List<ArrayList<Integer>> ArrayList = new ArrayList<>();
// 다차원 (예시에선 2차원) 동적 배열의 선언

Collections.sort(list); // 정렬

- 내부적으로 Object 배열을 사용하며, 기존 배열 크기를 넘어서면 더 큰 배열을 선언하여 할당

※ ArrayList는 배열의 크기가 커져야 하는 경우 내부의 grow() 메소드를 호출하여 1.5배 크기의 배열을 재할당하고 데이터를 복사한다. 단, 크기가 작아져야 할 경우엔 자동으로 재할당 되지 않으며, trimToSize()등으로 줄여줘야 한다.


- 최종 수정일 : 23-04-11

- 이 글은 지속적으로 수정되고 있으며, 오타나 잘못된 정보에 대한 사항은 댓글로 남겨주시면 감사하겠습니다.

'Java.APS > APS.Algorythm' 카테고리의 다른 글

[APS] 006 : 자료구조 - 연결리스트  (0) 2023.04.11
[APS] 004 : 자료구조 - 배열  (1) 2023.04.10
[APS] 003 : 자료구조 개론  (0) 2023.04.10
[APS] 002. 복잡도  (0) 2023.04.10
[APS] 001 : 알고리즘 개론  (0) 2023.04.10