JAVA컬렉션List

ArrayList와 배열

Java를 사용하면, 데이터를 효율적으로 관리하고 조작할 수 있는 다양한 자료 구조가 필요하다. 그 중에서 ArrayList는 배열의 한계를 극복하고, 동적으로 배열 크기를 조정할 수 있는 리스트다.

배열의 개념과 특징

배열은 고정된 크기의 데이터 저장소로, 인덱스를 통해 데이터 접근을 빠르게 접근 할 수 있는 자료구조이다.

  • 인덱스를 통한 빠른 접근 속도 : 특정 요소 접근 / O(1)
  • 순차적 검색 : 배열의 모든 요소를 순차적으로 탐색(검색) / O(n)

배열은 특정 위치에 데이터를 삽입하거나 삭제할 때, 모든 데이터를 이동해야하는 점과 크기가 고정적이라는 단점을 가지고 있다.

ex) 배열의 첫번째 Index에 데이터를 삽입할 경우 기존 첫번째 데이터부터 모두 오른쪽으로 한칸씩 밀고 데이터를 넣어야함

ArrayList의 탄생

배열의 한계를 극복하기 위해 컬렉션 자료 구조를 제공한다. 배열과 유사하게 인덱스를 통해 데이터를 관리하지만, 크기가 동적으로 조정되기 때문에, 데이터 추가와 삭제가 용이하다.

주요 기능

  • 동적 크기 조정 : 데이터 삽입 시, 크기가 부족하다면 동적으로 크기 증가
  • 데이터 접근 : 인덱스를 통한 빠른 접근 가능

빅오 정리

  • 데이터 추가
    • 마지막 추가 : O(1)
    • 앞, 중간 추가 : O(n)
  • 데이터 삭제
    • 마지막 삭제 : O(1)
    • 앞, 중간 삭제 : O(n)
  • 인덱스 조회 : O(1)
  • 검색 : O(n)

배열 리스트는 마지막에 데이터를 추가하거나 삭제할 때는 성능이 좋지만, 중간이나 앞에 추가 삭제할 때는 성능이 안좋다. 이를 개선하기 위해 LinkedList가 등장 ( LinkedList )