Collectin이란?
- Java의 Collection이란 데이터의 집합, 그룹
- JCF(Java Collections Framework) : 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합
- Collection 주요 인터페이스: List, Set, Queue
- Map: Collection 인터페이스를 상속받고 있지 않지만 Collection으로 분류됨
- Stack: List - Vector 클래스를 상속

List & Set & Map

List
1. List 특징
- 입력 순서를 유지하며, 데이터의 중복을 허용
- 인덱스를 통해 저장 데이터에 접근이 가능
2. List 인터페이스의 주요 구현체
- ArrayList
- 단반향 포인터 구조 데이터 순차적 접근(조회)가 빠름
- LinkedList
- 양방향 포인터 구조 데이터 삽입, 삭제가 빠름
3. 2중 LinkedList
List<List<Integer> list = new ArrayList<>();
list[0].add(value);
list[0].get(0);
Set
1. Set 특징
- 입력 순서를 유지하지 않으며, 데이터의 중복 허용하지 않음
- 데이터에 null 입력 가능하나, 한 번만 저장하고 중복 저장을 허용하지 않음
- 인덱스가 따로 존재하지 않기 때문에 Iterator를 사용하여 조회
2. Set 인터페이스의 주요 구현체
a. HashSet
- 입력 순서를 보장하지 않으며, 데이터의 중복을 허용하지 않음
b. LinkedHashSet
- 입력 순서를 보장하며, 데이터의 중복을 허용하지 않음
c. TreeSet
- (default) 입력한 데이터의 크기가 비교 가능한 경우 오름차순으로 정렬되며, 데이터의 중복을 허용하지 않음
- 입력하는 데이터가 사용자 정의 객체인 경우 Comparable을 구현하여, 정렬 기준 설정 가능
Map
1. Map 특징
- Key&Value 구조
- Key(키)는 입력 순서를 유지하지 않으며, 중복을 허용하지 않음, Value(값)는 중복을 허용
- 인덱스가 따로 존재하지 않기 때문에 Iterator를 사용하여 조회
2. Map 인터페이스의 주요 구현체
a. HashMap
- Key(키)에 대한 입력 순서를 보장하지 않으며, 중복 Key(키)를 허용하지 않음
b. LinkedHashMap
- Key(키)에 대한 입력 순서를 보장하며, 중복 Key(키)를 허용하지 않음
c. TreeMap
- 레드-블랙 트리(Red-Black Tree)를 기반으로 Key&Value를 저장
- default: 입력한 Key(키)데이터의 크기가 비교 가능한 경우 오름차순으로 정렬되며, 중복 Key(키)를 허용하지 않음
- 입력하는 데이터가 사용자 정의 객체인 경우 Comparable을 구현하여, 정렬 기준 설정 가능
Queue & Stack
- Queue: FIFO (First In First Out)
- Stack: LIFO (Last In First Out)

Queue
1. Queue란?
- 선입 선출(FIFO: First In First Out)의 성격을 지닌 자료구조
2. Queue 선언
Queue<Integer> q = new LinkedList<>();
Queue q = new LinkedList(); // 아무 자료형이나 가능
3. Queue Method
- 사용: offer, poll, peek, clear
q.offer(value);
q.add(value);
q.poll();
q.remove();
q.remove(value)
q.peek();
q.element();
q.clear();
4. PriorityQueue (우선 순위 큐)
- 우선 순위를 가지는 큐
- 수행할 작업이 여러 개 있고 시간이 제한되어 있을 때 우선순위가 높은 것부터 수행할때 쓰임
-> ex) 네트워크 제어, 작업 스케쥴링
- 우선순위 큐에 저장할 객체는 필수적으로 Comparable 인터페이스를 구현
-> compareTo() 메서드 로직에 우선순위를 결정
- 저장공간으로 배열을 사용하며, 각 요소를 힙(heap) 형태로 저장
- null 저장 불가능

5. Dequeue (Double-Ended Queue)
- 양쪽으로 넣고 빼는 것이 가능한 큐
- 스택과 큐를 하나로 합쳐놓은 것과 같음
-> 스택으로 사용할 수도 있고, 큐로 사용할 수도 있음
- Deque의 조상은 Queue, 구현체로 ArrayDeque와 LinkedList가 있음

a. ArrayDequeue
- 스택으로 사용할 때 Stack 클래스보다 빠르며, 대기열로 사용할 때는 LinkedList보다 빠름
- 사이즈 제한 X
- null 저장 X

b. LinkedList
- LinkedList는 List 인터페이스와 Queue 인터페이스를 동시에 상속받고 있기 때문에, 스택 / 큐 로서도 응용이 가능
- 실제로 LinkedList 클래스에 큐 동작과 관련된 메서드를 기본으로 지원
-> ex) push, pop, poll, peek, offer

Stack
1. Stack이란?
2. Queue 선언
Stack<Integer> st = new Stack<>();
3. Queue Method
st.push(value);
st.pop();
st.peek();
st.clear();
참고자료