List 인터페이스 안에 ArrayList, LinkedList 등이 포함되며, 공통되는 메서드를 추출해놓고 실제 구현은 클래스 내에서 이루어진다. 결국 ArrayList는 List에 상속된 클래스의 관계를 가진다.
리스트는 배열의 단점을 개선하여 크기가 동적으로 변하며, 필요한 메모리의 크기를 정확히 알 수 없는 경우에 사용한다.
ArrayList<Object> list = new ArrayList<>();
List<Object> list = new ArrayList<>();
Java의 제너릭(Generic) 특성에 의해 타입이 클래스의 외부에서 사용자의 필요에 따라 지정될 수 있다. 이를 통해 위와 같은 인스턴스의 형 변환이 가능해지고 내부 디테일과 메모리 함축 등에서 이점을 가진다.
탐색에서 효율이 좋은 ArrayList와 삽입/삭제에서 효율이 좋은 LinkedList를 적절히 필요에 따라 바꾸어 사용할 수 있다. 이때 List로 선언하는 것이 유연성의 측면에서 훨씬 유리하다.