안녕하세요. 최근에 신입 개발자 면접에서 Map과 Set의 차이점이 무엇인지 질문을 받았었는데, 제대로 답변하지 못한 것 같아서 이번 기회에 확실히 개념과 특징, 차이점을 정리하기 위해 List, Map, Set에 관한 포스팅을 하려고 합니다.
JAVA Collection Framework의 상속 기본 구조
List, Map, Set에 관해 설명드리기 전에 컬렉션 프레임워크를 사용하는 이유에 대해 말씀드리자면, 기존에는 많은 데이터를 처리하기 위해 배열을 사용했었지만 크기가 고정되어있고 삽입 및 삭제 시간이 오래 걸린다는 불편한 점들이 많았습니다. 따라서 이를 보완하기 위해 자바에서 동적 배열 개념인 컬렉션 프레임워크를 제공하였는데 종류는 대표적으로 List, Map, Set이 있습니다. 그리하여 자바 컬렉션 프레임워크로 인해 자료의 삽입, 삭제, 검색 등등이 용이해지고 어떠한 자료형이라도 담을 수 있으며 크기가 자유롭게 늘어난다는 강점을 가져 많은 사람들에게 사용되고 있습니다.
List
순서가 있고 중복을 허용합니다.
인덱스로 원소에 접근이 가능합니다.
크기가 가변적입니다.
List의 종류와 특징
- LinkedList
- 양방향 포인터 구조로 데이터 삽입, 삭제가 빠르다.
- ArrayList보다 검색이 느리다.
- ArrayList
- 단반향 포인터 구조로 데이터 순차적 접근에 강점을 가진다.
- 배열을 기반으로 데이터를 저장한다.
- 데이터 삽입, 삭제가 느리다.
- 데이터 검색이 빠르다.
Map
Key와 Value의 한쌍으로 이루어지는 데이터의 집합.
Key에 대한 중복이 없으며 순서를 보장하지 않습니다.
뛰어난 검색 속도를 가집니다.
인덱스가 따로 존재하지 않기 때문에 iterator를 사용합니다.
Map의 종류와 특징
- HashMap
- Key에 대한 중복이 없으며 순서를 보장하지 않는다.
- Key와 Value 값으로 NULL을 허용한다.
- 동기화가 보장되지 않는다.
- 검색에 가장 뛰어난 성능을 가진다.
- HashTable
- 동기화가 보장되어 병렬 프로그래밍이 가능하고 HashMap 보다 처리속도가 느리다.
- Key와 Value 값으로 NULL을 허용하지 않는다.
- LinkedHashMap
- 입력된 순서를 보장한다.
- TreeMap
- 이진 탐색 트리(Red-Black Tree)를 기반으로 키와 값을 저장한다.
- Key 값을 기준으로 오름차순 정렬되고 빠른 검색이 가능하다.
- 저장 시 정렬을 하기 때문에 시간이 다소 오래 걸린다.
Set
데이터의 집합이며 순서가 없고 중복된 데이터를 허용하지 않습니다.
중복되지 않은 데이터를 구할 때 유용합니다.
빠른 검색 속도를 가집니다.
인덱스가 따로 존재하지 않기 때문에 iterator를 사용합니다.
Set의 종류와 특징
- HashSet
- 인스턴스의 해시값을 기준으로 저장하기 때문에 순서를 보장하지 않는다.
- NULL 값을 허용한다.
- TreeSet보다 삽입, 삭제가 빠르다.
- LinkedHashSet
- 입력된 순서를 보장한다.
- TreeSet
- 이진 탐색 트리(Red-Black Tree)를 기반으로 한다.
- 데이터들이 오름차순으로 정렬된다.
- 데이터 삽입, 삭제에는 시간이 걸리지만 검색, 정렬이 빠르다.
요약
List는 기본적으로 데이터들이 순서대로 저장되며 중복을 허용한다.
Map은 순서가 보장되지 않고 Key값의 중복은 허용하지 않지만 Value값의 중복은 허용된다.
Set은 순서가 보장되지 않고 데이터들의 중복을 허용하지 않는다.
개인적으로 구글링하며 정리한 글이기 때문에 틀린 내용이 있을 시 댓글로 지적해 주시면 감사드리겠습니다.
'📁Data Structure' 카테고리의 다른 글
[Data Structure] 우선순위 큐 (Priority Queue) (0) | 2022.01.10 |
---|---|
[Data Structure] 배열, 동적 배열, 연결 리스트(Array & Dynamic Array& Linked List) (0) | 2021.10.25 |
[Data Structure] 스택(Stack)과 큐(Queue) 개념, 특징, 활용 예시 (2) | 2021.10.19 |
[Data Structure] 자료구조란? (0) | 2021.10.13 |
[자료구조] 세그먼트 트리(구간트리, Segment Tree)로 구간 내 최소값 찾기 (1) | 2020.12.24 |