추상적 자료구조(추상적으로 인터페이스를 만들어 놓은 것이기 때문에)
순서를 가지고, 일렬로 나열한 원소들의 모임
순서가 있고 중복을 허용한다는 점에서 Set
과 구별됨
순서를 가지고 일렬로 특정한 메모리 공간에 나열되어 있는 게 특별한 이유
예를들어 첫 칸(2)의 주소를 알고, 3번째 원소에 접근하고 싶으면 첫 칸의 주소값에 3칸을 더한 주소를 바로 보면 얻을 수 있음
반대로 순서를 가지고 저장되어 있기 때문에 추가와 삭제가 매우 느림
예를들어 리스트의 특성을 유지하면서, 중간의 1을 삭제하고싶다면, 1을 삭제하고 1 뒤에 있는 3,8,4 와 같은 데이터를 한칸씩 앞으로 이동해줘야 함
즉, 검색(조회)에는 유리하고, 수정/삭제는 불리한 자료구조
“추상적” 자료구조인 리스트는 개념적으로 보통 다음 연산들을 지원
// 실제 java.util의 List 코드
public interface List<E> extends Collection<E> {
int size();
boolean isEmpty();
...
boolean addAll(Collection<? extends E> c);
boolean add(E e);
...
}
List 인터페이스는 제네릭 인터페이스
타입변수 E는 리스트에 저장되는 데이터의 타입을 타입변수로 선언
실제로 List 속성을 가지는 구현체들에 있는 add() 메소드 같은 경우, 리스트 인터페이스에 지정한 E라는 타입을 추가하는데 사용
addAll()
메서드
메서드의 인자에 조건이 두개 들어있는데
이 두가지 조건을 만족하는 뭔가를 넘겨받은 경우에만, addAll로 일괄적으로 추가 할 수 있음
Collection(집합적 자료)라는 속성은 Iterable(순회가능)이라는 속성을 상속받고 있음
Collection의 하위 ‘속성’으로는 List, Queue, Set 등이 존재
List의 실제 구현체들은 Arr, Linked, Vector, Stack들이 존재
상황에 맞는 적절한 자료구조를 택하는 방법