15. What is difference between ArrayList and LinkedList ?
질문의 목적
- List Collection에서 자주 사용하고 있는 ArrayList 와 LinkedList 의 차이
List
- element 들의 순서를 지원하는 interface
- Vector vs arrayList
- ArrayList vs LinkedList
Vector vs ArrayList
vector
- 완전 조상님. 처음부터 만들어져서 지금까지 유지되어옴
- 사이즈를 넓혀야 할 경우 두배씩 크기를 키운다
- 처음 (길이)10로만들면 새롭게 11번째인 element를 넣을때 디폴트로 20개로 늘어남.
- synchronised (동기화)
ArrayList
- 사이즈를 넓혀야 할 경우 50%씩 크기를 키운다
- synchronised 를 지원하지 않기 때문에 vector보다 성능이 좋다
- 동기화를 고려해야할 상황이 아니라면 vector보다 arraylist 추천
동기화를 고려해야할 상황
- 같은 데이터에 여러자원이 접근하게 될 경우 데이터의 일관성을 고려할 필요가 있다
ArrayList vs LinkedList
ArrayList
- list interface를 구현했기 때문에 기본적으로 순서를 가지고 index를 구현
- 랜덤하게 특정 요소에 접근할 경우 빠르게 접근 가능
- 추가/ 삭제인 경우 속도가 느리다 전체 인덱스를 재배치 해야함.
LinkedList
- 노드의 개념으로 앞뒤 요소들이 연결되어있다
- head/ tail
- 추가/ 삭제 시 빠르다. head와 tail 에게만 영향도를 줌
- 검색시 처음부터 하나하나 순차적으로 체크해야해서 속도가 느리다.
- 단방향성을 가지고 있기 때문데 index를 가지고 데이터에 접근해야하는 경우에는 부적절한 자료구조이다
Keyword check
- vector
- synchronised elements, huge size increase
- ArrayList
- better for random accessing elements by index, slow for add/remove
- LinkedList
- large number of add/remove operations but rarely access of elements