13.4 ArrayList
: 가변 크기의 배열을 구현하는 클래스
Vector와의 차이점
=> 멀티 스레드 상황이라면 vector를 사용하는 것이 좋다.

-ArrayList는 타입 매개 변수를 가지는 제네릭 클래스로 제공된다.
-메소드

+size, contains 등
-Arrays.asList() 메소드는 배열을 받아서 리스트 형태로 반환한다.
(배열 기반 -> 컬렉션 기반 프로그램 변경 시 다리의 역할을 함)

1.
1) 크기 조절이 가능하다. (배열은 고정된 크기)
2) 편리한 메소드를 제공한다.
3) 제네릭을 이용한 자동 타입 변환이 가능하다.
AbstractList 클래스가 직접적인 부모 클래스이다.
Object -> AbstractCollection -> AbstractList -> ArrayList
List, Set 등 인터페이스를 기준으로 프로그래밍하면 구현체를 쉽게 변경할 수 있다.
ex) ArrayList -> LinkedList
1) 인덱스 기반의 for문
2) 향상된 for문
3) Iteratior 사용
4) forEach + 람다식 (Java8 이상)