[Java] Set, List, Map
Set, List, Map은 객체를 담을 수 있는 동적크기 배열인 Collection형태로 이뤄진 인터페이스이다.
interface(인터페이스)
추상 메소드와 상수로 이뤄진 클래스.
추상 메소드를 구현해야 사용이 가능하다.
표로 간단히 Set, List, Map을 요약해보면 아래와 같다.
인터페이스 | 구현 클래스 | 특징 |
Set | HashSet, TreeSet | 순서가 없는 데이터의 집합. 중복값을 허용하지 않는다. |
List | LinkedList, Stack, Vector, ArrayList | 순서가 있는 데이터의 집합. 중복값을 허용한다. |
Map | HashMap, TreeMap, HashTable, Properties | Key와 Value의 쌍으로 이뤄진 데이터의 집합. 순서는 없으며 Key는 중복을 허용하지 않고 Value는 중복을 허용한다. |
List
Collection 인터페이스를 확장한 자료형으로 각 원소들의 순서를 저장해 Index를 사용하여 특정 위치에 원소를 삽입하거나 특정 위치에 접근할 수 있다.
ArrayList
- 검색 속도가 빠르고 크기가 자동으로 늘어나기 때문에 유연하게 사용할 수 있다.
- 단방향 포인터 구조로 자료에 순차적으로 접근할 때 좋다.
Vector
- ArrayList의 구형버전으로 잘 사용하진 않는다.
LinkedList
- 양방향 포인터 구조로 데이터를 중간에 삽입하거나 삭제가 빈번할 때 좋다.
- 스택, 큐, 양방향 큐 등을 만들 때 주로 사용한다.
Set
중복된 요소를 포함할 수 없는 집합이다. List와 다르게 Index를 사용하지 않기 때문에 Index 매개변수가 없다.
HashSet
- 순서를 전혀 예측할 수 없다.
- 임의로 접근했을 때 접근 속도가 가장 빠르다.
LinkedHashSet
- 추가된 순서나 최근에 접근한 순서대로 접근이 가능하다.
TreeSet
- 정렬된 순서대로 보관하고, 정렬 방법을 지정할 수 있다.
Map
Key와 Value의 쌍으로 연관지어 저장하는 객체이다.
HashMap
- 중복을 허용하지 않고 순서를 보장하지 않는다.
- 키와 값에 대해 NULL이 허용된다.
HashTable
- HashMap 보다는 느리지만 동기화가 지원된다.
- 키와 값에 대해 NULL이 허용되지 않는다.
TreeMap
- 이진 검색 트리의 형태이다.
- 정렬된 순서로 키/값 쌍을 저장해 빠른 검색이 가능하다.
- 저장 시에 정렬을 하기 때문에 저장 시간이 오래 걸린다.
LinkedHashMap
- HashMap과 형태가 비슷하다.
- Map에 있는 쌍들의 연결 리스트로 유지되어 입력한 순서대로 반복이 가능하다.