장점
n번쨰 요소 데이터 접근이 빠르다.
단점
배열기반으로 구현된다. ArrayList의 생성자의 parameter에 초기 크기값을 받을 수 있다.
배열의 단점을 보완한 리스트이다.
(단점; 크기 변경불가, 중간 데이터 삭제 오래걸림)
배열과 달리 불연속적으로 저장된 데이터 노드들을 연결한다.
추가
뒤에 있는 데이터들을 옮기는 과정이 없고 바로 앞뒤 하나의 노드만 참조 변경을 해주면 된다. 1,2 노드 사이에 데이터를 추가하는 경우 1에서 2로 연결하던 참조를 1에서 new로 new에서 2로 참조를 하여 연결하면 된다. 옮기는 과정이 없다.
삭제
1,2,3노드에서 2노드를 삭제한다면 1노드의 연결 노드 참조를 3노드로 바꿔주면 된다. 2노드는 나중에 알아서 gc가 삭제한다.
단점
n번째 요소에 접근하려면 순차적으로 첫번째부터 n번쨰까지 모두 조회하는 수밖에 없다.
배열의 경우 연속적으로 저장돼서 계산으로 주소 구해서 바로 접근가능
n번째 주소= 시작 주소 + n * (노드크기)
double linked list
접근성을 향상시키기위해 앞으로도 뒤로도 갈 수 있도록 참조 노드 수를 늘렸다.
double circular linked list
끝의 다음을 맨 앞의 노드에 연결하고 맨 앞 노드의 앞 참조를 맨 끝 노드와 연결한다.
끝 노드를 구하고 싶을떄 맨 앞에서 끝까지 조회하는 것이 아닌 이전 노드로 가서 맨 끝 노드에 접근할 수 있다.
중간에서(비순차) 데이터를 추가, 삭제: LinkedList가 빠름
ArrayList 6600 LinkedList 380ms
처음부터(순차) 데이터를 추가, 삭제 ArrayList가 빠름
Arr 400 11 Linked 600 46
n번쨰 요소 접근 ArrayList가 빠름
Arr 1 Linked 432ms