[자료구조] 컬렉션 프레임워크 - List, Set, Map
![](https://velog.velcdn.com/images%2Fits-mingyu%2Fpost%2Fd9972b04-d472-4574-9564-4a1540668d11%2F%EA%B7%B8%EB%A6%BC1.png)
컬렉션 프레임워크
1) 컬렉션 프레임워크란?
- 대량의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합
- 데이터를 처리하는 알고리즘과 데이터를 저장하는 자료구조를 구조화하여 클래스로 구현한 것
- 데이터를 저장하는 자료 구조에 따라 List Interface, Set Interface, Map Interface로 나누어짐
2) 컬렉션 프레임워크를 사용하는 이유
- 기존에는 많은 데이터들을 처리할 때에 배열을 사용했지만 그 크기가 고정되어 있고 삽입/삭제를 자주할 경우 성능이 저하되는 단점이 있었음
- 따라서 이것을 보완하기 위해 동적 배열의 개념을 탑재한 컬렉션 프레임워크를 제공하였음
- 이로 인해 자료의 삽입/검색/삭제에 의한 성능의 저하와 같은 단점이 해소되었음
- 자료형에 구애받지 않고 담을 수 있으며 크기가 동적으로 조절된다는 장점이 있음
1. List
1) 특징
- 순서가 있는 데이터의 집합
- 데이터의 중복을 허용함
2) 종류
- ArrayList
» 객체 내부에 있는 배열에 데이터를 저장
» 속도가 빠르고 크기를 마음대로 조절이 가능
» 단방향 포인터 구조로 자료에 대한 순차적인 접근이 가능
» 동기화를 보장하지 않기 때문에 가벼움
- LinkedList
» Node와 Pointer를 이용한 리스트
» 양방향 포인터 구조로 데이터의 삽입, 삭제가 잦을 경우에 효율적
» 스택, 큐, 양방향 큐 등에 사용됨
- Vector
» ArrayList와 동일하게 사용이 가능한 리스트로, 동기화 여부의 차이가 있음
» 동기화를 보장함(ArrayList와 반대)
- Stack
» LIFO, 제일 마지막에 추가된 데이터가 가장 먼저 꺼내지는 자료구조
2. Set
1) 특징
- 순서를 유지하지 않는 데이터의 집합
- 데이터의 중복을 허용하지 않음
2) 종류
- HashSet
» 무작위로 값을 담는 Set(순서를 가지지 않음)
» 효율이 좋음
- LinkedHashSet
» 넣은 순서대로 값을 담는 Set(순서를 가짐)
- TreeSet
» 자동정렬을 수행함으로써 값을 담는 Set(순서를 가지지 않음)
» 가장 바쁜 Set
3. Queue
1) 특징
- FIFO 구조를 가짐
- 들어올때는 enqueue, 나갈때는 dequeue라고 함
2) 종류
- PriorityQueue
» 우선순위를 가지는 큐로 원소에 우선순위를 부여하여 높은순으로 먼저 반환함
» 이진트리 구조로 구현되어 있음
- ArrayDeque
» 양쪽으로 삽입/삭제가 가능한 큐 자료구조
4. Map
1) 특징
- Key & Value로 이루어진 데이터의 집합
- 순서를 유지하지 않음
- Key는 중복을 허용하지 않음
- Value는 중복을 허용함
2) 종류
- HashMap
» Key & Value가 무작위로 담기는 Map(순서를 가지지 않음)
- LinkedMap
» Key & Value가 넣는 순서대로 담기는 Map(순서를 가짐)
- TreeMap
» Key 값에 의해 정렬이 되는 Map(순서를 가지지 않음)
List, Set, Map 차이점
1) List / Set 차이점
- List는 순서가 있는 Collection이기 때문에 데이터를 넣는 순서가 보장되어 Index로 특정 아이템을 가져올 수 있지만 Set은 데이터를 넣는 순서가 보장되지 않아 불가능함
- List는 중복을 허용하지만, Set은 중복을 허용하지 않음
2) List / Map 차이점
- List는 순서가 있지만, Map은 순서가 없음
- Map은 Key, Value값을 저장함
3) Set / Map 차이점
- Set은 데이터 중복을 허용하지 않지만, Map은 Key 중복은 허용하지 않고, Value 중복은 허용함
![](https://velog.velcdn.com/images%2Fits-mingyu%2Fpost%2Fd9c52a25-bf5f-4cd5-a783-9572337f3b56%2F%EA%B7%B8%EB%A6%BC1.png)
이해하기 쉽게 정리되어 있네요! 감사합니댜 :D