상위문서 : 자료구조
필수참고문서 : 빅오표기법
1.개요
배열리스트는 배열을 이용하여 리스트의 추상형 자료구조(ADT)를 구현한 것이다. 리스트(ADT)는 다음과 같은 연산을 가지고 있다.
- 빈 리스트를 생성(생성자를 이용)
- 리스트가 비어있는지 확인(isEmpty)
- 리스트에 원소를 삽입(add), 리스트 맨 앞에 삽입(add first), 리스트 맨 뒤에 삽입(add last)
- 리스트의 특정 원소를 보는(toString)
- 특정 리스트 삭제(remove), 리스트 맨 앞 삭제(remove first), 리스트 맨 뒤 삭제(remove last)
2.설명
배열리스트는 배열을 사용하여 리스트를 구현한것이다.
배열의 장점은 인덱스를 이용하여 빠르고 쉽게 보고 싶은 원소를 볼 수 있다는 점이다. 따라서 toString은 구현하기 매우 쉽다. 하지만 add와 remove는 구현하는데 문제가 생기는데 다음 그림을 보자.
이렇듯 배열리스트에 데이터 하나를 넣기 위해서는 넣는 인덱스 기준으로 한칸씩 뒤로 데이터들을 밀어내야한다. 이번엔 remove를 보자
이렇듯 삭제할 때도 뒤에 있는 데이터를 모두 삭제할려는 인덱스 기준으로 당겨줘야한다. 위에 그림에는 데이터쪽만 표현을 했지만 사실 null쪽도 다 당겨줘야한다.
따라서 배열리스트를 구현할 때는 저 문제를 어떻게 효율적으로 풀어내 구현하는지가 중요하다.
그리고 배열리스트의 시간복잡도는 데이터 추가와 삭제 모두 O(n)의 시간이 걸리며 나머지는 O(1)의 시간이 걸린다.
배열리스트에 add를 사용하여 데이터를 넣을 때
이렇듯 배열리스트에 데이터 하나를 넣기 위해서는 넣는 인덱스 기준으로 한칸씩 뒤로 데이터들을 밀어내야한다. 이번엔 remove를 보자
배열리스트에 remove를 사용하여 데이터를 제거할 때
이렇듯 삭제할 때도 뒤에 있는 데이터를 모두 삭제할려는 인덱스 기준으로 당겨줘야한다. 위에 그림에는 데이터쪽만 표현을 했지만 사실 null쪽도 다 당겨줘야한다.
따라서 배열리스트를 구현할 때는 저 문제를 어떻게 효율적으로 풀어내 구현하는지가 중요하다.
그리고 배열리스트의 시간복잡도는 데이터 추가와 삭제 모두 O(n)의 시간이 걸리며 나머지는 O(1)의 시간이 걸린다.