1. Collection
- 여러 원소를 담을 수 있는 자료구조
- List, Set, Queue로 크게 3가지 인터페이스로 분류.
Map은 collection 인터페이스를 상속받고 있진 않지만 collection으로 분류 함
[ 배열과의 차이점? ]
: 배열은 정적으로 메모리 할당. collection은 동적으로 메모리 할당.
2. Collection 종류

1) List
- 순서있는 자료구조
(1) ArrayList
- 배열을 기반으로 구현
- 논리적, 물리적 저장 순서가 일치 함
- 삭제, 삽입 시 자료의 이동이 필요하므로 시간이 더 걸림
- thread safe하지 않음 (동기화 X)
=> 동시에 여러 스레드가 접근 가능
(2) LinkedList
- 자료를 노드의 포인터 부분을 이용 해 서로 연결시킴
- 일반 배열 (array)보다 데이터 검색 속도 느림
- 자료의 삽입, 삭제 시 용이
- 연결을 위한 포인터 사용으로 저장 공간이 더 필요 함
- 인덱스 대신 현재 위치의 이전, 다음 위치를 기억 함
(3) Vector
- 배열과 마찬가지로 인덱스를 이용 해 배열에 엑세스 가능
- thread safe함 (동기화 되어 있음)
=> 한번에 하나의 스레드만 접근 가능
2) Set
- 순서 없음
- 중복 허용 X
(1) HashSet
- 내부적으로 해싱을 이용해 구현 된 클래스
- set 파생 클래스에서 가장 성능 우수
(2) TreeSet
- 레드-블랙 트리 (이진 트리의 일종) 구조
- 삽입, 삭제 시 log(n)
3) Queue
- 먼저 들어온 것이 먼저 나감 (FIFO)
(1) PriorityQueue
- 들어온 순서가 아닌, 우선순위 별로 큐에서 원소 꺼냄
(2) ArrayDeque
4) Map
- (key, value) 형태로 저장
(1) HashMap
(2) HashTable
- HashTable과 거의 동일하지만, 동기화 보장
(3) TreeMap
(4) LinkedHashMap