자바 컬렉션 프레임 워크의 장점
인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화 되어 있어 사용법으 익히기에도 편리하고 재사용성이 높다
데이터 구조 및 알고리즘의 고성능 구현을 제공하여 프로그램의 성능과 품질을 향상시킨다
관련없는 api간의 상호 운용성을 제공
구현되어 있는 api를 사용하기에 새로운 api 를 익히고 설계하는 시간이 줄어든다
소프트웨어 재사용성을 높임. 만약 자바에서 지원하지 않는 새로운 자료구조가 필요하다면 컬렉션들을 재활용하여 접합해 새로운 알고리즘을 만들어낼 수 있음
컬랙션 프레임워크에 저장할 수 있는 데이터는 오직 객체 뿐임 즉 int, double 형과 같은 자바의 primitive 타입들은 적재할 수 없음 (자바의 8 가지 primitive(원시) 타입 : byte, short, int, long, float, double, char, boolean)
primitive(원시) 타입은 wrapper 타입으로 변환하여 Integer 객체나 Double 로 박싱(boxing) 하여 저장해야함
또한 null도 담을 수 있음

컬렉션 프레임워크는 2 가지로 나뉜다
collection 인터페이스
map 인터페이스
list 와 set 인터페이스는 컬렉션과 공통부분이 많기 때문에 공통된 부분을 모은 collection 인터페이스로 상속되어 있음
map 인터페이스 컬렉션들은 두개의 데이터를 묶어서 한쌍으로 저장하기 때문에 collection 인터페이스와 분리되어 있음
대부분의 컬렉션 클래스는 list, set, map 중의 하나를 구현하고 있으며, 구현한 인터페이스의 이름이 클래스이름에 포함되는 특징이 있다 (ArrayList, HashSet, HashMap ... 등)
(+참고) : 그러나 Vector, Stack, Hashtable, Properties 와 같은 클래스들은 컬렉션 프레임워크가 만들어지기 이전부터 존재하던 것이기 때문에 컬렉션 프레임워크의 명명법을 따르지 않는다. 또한 Vector 나 Hashtable 과 같은 기존의 컬렉션 클래스들은 호환을 위해 남겨진 것이므로 가급적 사용하지 않는 것이 좋다.

List, Set, Queue에 상속을하는 실질적인 최상위 컬랙션 타입
업캐스팅으로 다양한 종류의 컬렉션 자료형을 받아 자료를 삽입하거나 삭제, 탐색 기능을 할 수 있다(다형성)
List 인터페이스 :

리스트는 저장 순서가 유지되는 컬렉션을 구현하는데 사용한다
같은 요소의 중복 저장을 허용한다
배열과 마찬가지로 index로 요소에 접근함 리스트와 배열의 가장큰 차이점은 리스트는 자료형의 크기가 고정이 아닌 데이터 양에 따라서 동적으로 늘어났다 줄어들었다 할 수 있음(가변형 데이터)
요소사이에 빈공간을 허용하지 않아서 삽입 또는 삭제시 배열의 이동이 생김
ArrayList 클래스

배열을 이용하여 만든 리스트
데이터의 저장 순서가 유지되며 중복을 허용한다
데이터의 양에 따라 공간이 자동으로 늘어나고 줄어든다
단방향 포인터 구조로 자료에 대한 순차적인 접근에 강점이 있어 조회가 빠름
삽입 삭제가 느리다는 단점이 있으나 순차적으로 추가/ 삭제하는 경우에는 가장 빠름
set 인터페이스

데이터의 중복을 허용하지 않고 순서를 유지하지 않는 데이터 집합 리스트
순서가 없으므로 인덱스로 객체를 검색해서 가져오는 get(index)메서드도 없음
중복 저장이 불가능하기때문에 null 값도 하나만 저장 가능
map인터페이스

키(key)와 값(value)이 쌍으로 연관지어 이루어진 데이터의 집합
값은 중복이 가능하지만 키는 해당 map 내에서 고유해야함
기존에 저장된 데이터와 중복된 키값을 저장하면 기존의 값은 없어지고 마지막에 저장된 값이 남는다
저장 순서가 유지 되지 않는다
++Map 인터페이스의 메소드를 보면, Key값을 반환할때 Set 인터페이스 타입으로 반환하고, Value값을 반환할때 Collection 타입으로 반환하는걸 볼 수 있다.
Map 인터페이스에서 값(value)은 중복을 허용하기 때문에 Collection 타입으로 반환하고, 키(key)는 중복을 허용하지 않기 때문에 Set 타입으로 반환하는 것이다.
hashmap 클래스

hashtable 을 보완한 컬렉션
배열과 연결이 결합된 hashing 형태로 키와 값을 묶어 하나의 데이터로 저장한다
중복을 허용하지 않고 순서를 보장하지 않음
키와 값으로 null이 허용된다
추가, 삭제, 검색, 접근성이 모두 뛰어나다
hashmap은 비동기로 작동하기 때문에 멀티 쓰레드 환경에서는 어울리지 않는다

컬렉션 프레임워크 선택 시점

정리
ArrayList
리스트 자료구조를 사용한다면 기본선택
임의의 요소에 대한 접근성이 뛰어남
순차적인 추가/삭제가 가장 빠름
요소의 추가/삭제 불리
hashmap/hashset
해싱을 이용해 임의의 요소에 대한 추가/삭제/검색/접근성 모두 뛰어남
검색에 최고성능