파이썬에서 배열은 선언 후에 append를 통해 바로 추가를 할 수 있었는데 자바에서 배열은 그렇지 않아 자바의 배열에 대해 구체적으로 작성해보고자 한다.
📌 배열이란?
배열이란 동일한 타입의 값들을 하나의 묶음으로 저장한 자료구조이다.
배열의 데이터는 메모리 상에 연속적으로 저장이 되며, 각 데이터는 인덱스(index)가 부여된다.
📌 배열의 특징 - 정적 자료구조
✔ 배열은 같은 타입의 데이터만 저장할 수 있다.
✔ 배열은 생성 시 길이를 지정할 수 있으며, 이 길이는 추후에 변경할 수 없다.
👉 때문에 배열에 데이터를 추가해야할 경우, 기존 배열이 아닌, 새로운 배열에 복사를 해야 한다.
😸 배열의 장점
✔ 빠른 접근 : 인덱스로 데이터에 빠르게 접근할 수 있다. ( 시간복잡도 : O(1) )
✔ 메모리 공간의 효율성 : 메모리 상에 연속된 형태로 저장이 되어 있어, 메모리 공간을 효율적으로 사용할 수 있다.
😾배열의 단점
✔ 크기 제한 : 크기를 동적으로 변경할 수 없어, 초기에 최대 크기를 예상해서 배열을 생성해야 한다.
✔ 데이터 추가 어려움 : 정적 크기로 인해, 추가적인 데이터 저장 시, 더 큰 배열을 생성하고 복사하는 작업을 거쳐야 한다.
✔ (배열의 크기가 충분할 경우) 배열 중간 원소 추가 및 삭제의 시간 비효율성 : 우리는 코딩으로 단순히 데이터 추가 및 삭제를 진행하지만, 메모리 상에서는 추가나 삭제 시, 나머지 데이터들이 전부 다 1칸씩 이동하는 등, 전부 재할당이 된다. 때문에, 이 작업에 시간복잡도 O(n)이 소요됨으로, 이 점을 고려해서 배열을 사용해야 한다.
📌 배열 ( Array ) vs 배열 리스트 ( ArrayList )
➡️ Java의 ArrayList는 Array와 달리 길이를 조정할 수 있는 동적 자료구조이다.
✔ ArrayList는 기본적으로 10개의 공간을 가진 배열로 생성된다.
✔ Array는 기본형 자료형을 담을 수 있으나, ArrayList는 기본형 자료를 가질 수 없다. 오직 Object만 가질 수 있다. (ArrayList에 기본형 (ex. int) 이 저장이 될 수 있는 이유는 JVM이 자동으로 형변환 ( Autoboxing ) 해줘, ArrayList에 Object만 저장되도록 해준다.
✔ Array는 동일한 타입의 데이터만을 묶어서 저장할 수 있어, Type-Safety하고, ArrayList는 제네릭스( Generics )를 통해 Type-Safety를 보장한다.
출처 : https://velog.io/@humblechoi/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-Array-vs-ArrayList
'자료구조와 알고리즘' 카테고리의 다른 글
[자료구조] 우선순위 큐 (Priority Queue) 와 힙 (Heap) (2) | 2023.09.28 |
---|