여러 개의 데이터를 저장할 수 있는 자료형
저장된 요소들의 순서가 있고 데이터에 중복이 가능하며 인덱스(index) 번호에 의해 정렬된다.
배열과 비슷하지만, 크기가 정적이지 않고 동적이다.
따라서 데이터의 추가, 삭제가 용이하다.
List는 인터페이스로 정의되어 있고 ArrayList, LinkedList 등 다양한 구현체가 존재한다.
내부적으로 배열을 사용하여 데이터를 저장하며, 데이터 접근 속도가 빠르다.
배열 안의 데이터가 꽉 차게 된다면 새로운 배열을 만들어서 기존의 내용을 복사하여 넣는다.
새로운 배열이 생성되고 복사하는 과정이 생기기 때문에 그 과정에서 지연이 발생한다.
배열 중간에 삽입 삭제가 일어날 경우, 배열 내부에 값들이 앞으로 당겨지거나, 뒤로 밀려나게 된다.
이렇게 할 경우, 값들을 일일히 옮겨줘야 하기 때문에 LinkedList보다 느리다는 단점이 있다.
노드(Node)를 사용하여 데이터를 저장하며, 데이터의 추가 삭제가 빈번하게 일어나는 경우 유용하다.
Node의 컨셉을 잘 알아야한다!
중간의 삽입 삭제가 일어날 경우, ArrayList보다 LinkedList를 사용하는 것이 좋다.
LinkedList는 데이터를 배열에 저장하는 구조가 아니기 때문에 데이터가 꽉차게 될 일이 없음
Node라는 객체에 data를 저장하고, 각 Node끼리 참조값을 가지고 있는 이중 연결 리스트로 구성되어 있다.
따라서 ArrayList와 다르게 특정 값을 찾을 때에는 노드들을 순차적으로 돌아야한다는 단점이 발생한다.
ArrayList와 다르게, Node끼리의 연결을 끊어버리면 된다. (삭제의 경우)
삽입일 경우, 해당 위치의 전, 후의 노드의 연결을 이어붙이면 된다.
따라서, 중간에 삽입 or 삭제가 발생할 경우 참조값을 통해 이용하기 때문에 ArrayList와는 다르게 속도가 빠르다.