cs 전공지식 #06 비선형자료구조 - Map, Set
2022/11/16
- 학습내용
컬렉션 프레임워크
1. 맵(Map)
Key와 Value로 이루어진 자료 구조
Key는 중복을 허용하지 않는 ID값이며, Value는 중복을 허용하는 Data 값이다.
또한 기본적으로 Map은 순서를 유지하고 있지 않는다.
가장 대표적인 Map의 예시로는 주민등록번호, ID/PW 이다.
※JAVA의 MAP
1. Hash 알고리즘을 이용한 HashMap(Map은 HashMap일 정도로 중요하다.)
2. HashMap의 이전 버전인 HashTable(Vector와 ArrayList 같은 관계)
3. 이진 탐색 트리를 사용하여 키를 오름차순 정렬까지 해주는 TreeMap
4. Map에 순서를 부여해주는 LinkedHashMap
MAP 사용이유
- 특정 데이터를 순간마다 캐치해야 할 때
- 특정 품목의 갯수를 카운트 해야할 때
- 저장하고 싶은 데이터가 특별한 Key 값을 가질 때
List형태의 자료구조들은 순서대로 값을 차곡차곡 집어넣는 일련의 하나의 줄과 같은 형태입니다.
반면 Map 형태의 자료구조는 각각의 Key와 매칭 되는 Value들이 존재합니다.
즉 순서보다는 정의된 이름(Key)과 상응하는 데이터들을 묶기 위한 자료 구조로서 효과적입니다.
맵 종류
Hashtable
- HashMap보다는 느리지만 동기화가 지원된다
- 키와 값으로 null이 허용되지 않는다
HashMap
- 중복을 허용하지 않고 순서를 보장하지 않는다
- 키와 값으로 null이 허용된다
- Hashtable보다는 HashMap을 사용하자
TreeMap
- 이진 탐색 트리의 형태를 가진다
- 데이터를 정렬된 순서로 저장한다. 정렬된 상태를 유지하기 위해 시간이 다소 오래 걸린다
LinkedHashMap
- HashMap과 상당히 흡사하다
- 데이터를 넣을 때 입력한 Key의 순서를 지키지 않는 HashMap과 달리 Key의 순서를 보장한다
맵 메서드
new Map()
- 맵의 생성자 함수로 맵을 만들 때 사용한다
map.set(key, value)
- key로 value를 저장한다
map.get(key)
- key로 해당 value를 가져온다
map.has(key)
- 해당 key가 있는지 검사하고 true, false를 반환한다
map.delete(key)
- key에 해당하는 값을 삭제한다
map.clear()
- 맵 안의 모든 요소를 지운다
map.size()
- 요소의 개수를 반환한다
2.셋(Set)
바로 중복을 허용하지 않는다.
저장 순서가 유지되지 않는다.
set은 순서 자체가 없으므로 인덱스로 객체를 검색해서 가져오는 메서드도 존재하지 않는다.
대신 전체 객체를 대상으로 한 번씩 반복해서 가져오는 반복자(iterator)를 제공한다.
set은 객체를 중복해서 저장할 수 없고 하나의 중복 저장이 안되기에 null값도 하나만 저장할 수 있다.
Set컬렉션은 수학의 집합에 비유될 수 있다.
집합은 순서와 상관없고 중복이 허용되지 않기 때문이다.
Set 컬렉션을 구현하는 대표적인 클래스들은 HashSet과 TreeSet이 있다.
이 2가지 클래스는 Set 인터페이스를 같이 상속하고 있으므로 공통적으로 사용할 수 있는 메서드들이 존재한다.
셋 종류
HashSet
- 순서 및 정렬을 하지 않는 가장 단순한 Set이다
- 덕분에 가장 빠른 임의 접근 속도를 가진다
LinkedHashSet
- HashSet과 흡사하다
- 연결 리스트를 사용해서 데이터를 저장하기 때문에 Key의 순서를 보장한다
TreeSet
- 이진 탐색 트리(레드-블랙 트리)의 형태를 가진다
- 데이터를 정렬된 순서로 저장, 정렬된 상태를 유지하기 위해 시간이 다소 오래 걸린다
- 정렬 방법을 지정할 수 있다
셋 메서드
new set(iterable)
- 셋을 만든다
- 이 트러블 객체를 전달받으면(대게 배열을 전달 반음) 그 안의 값을 복사해 셋에 넣어 준다
set.add(value)
- 값을 추가하고 셋 자신을 반환한다
set.delete(value)
- 값을 제거한다
- 값을 지우는 데 성공하면 true를 반환합니다 아니먄 false를 반환한다
set.has(value)
- 셋 내의 값이 존재하면 true, false를 반환한다
set.clear()
- 셋을 비운다.
set.size()
- 셋에 몇 개의 값이 있는지 세어준다