세 가지 컬렉션 모두 해시 기반이기 때문에 검색의 복잡도가 O(1)로 굉장히 빠르다.
순서가 존재하지 않으며 수학에서의 '집합' 개념에 해당한다.
1. Dictionary<TKey, TValue>
- 세 가지 컬렉션 중 가장 많이 사용되고 익숙한 자료구조.
- Key와 Value를 사용하여 자료를 저장한다.
- 중복 Key를 허용하지 않는다.
- 제네릭으로 키와 밸류의 타입을 미리 정할 수 있어 박싱과 언박싱이 발생하지 않는다.
var dict = new Dictionary<string, int>();
dict.Add("A", 1);
dict.Remove("A");
int myNum = dict["A"];
2. HashTable
- Key와 Value를 사용하여 자료를 저장한다.
- 중복 Key를 허용하지 않는다.
- Key와 Value 둘 다 Object형식을 사용한다. (박싱 언박싱 발생)
- Value가 Object형식이기 때문에 타입에 상관없이 여러 형태를 저장할 수 있다.
var hash = new Hashtable();
hash.Add("A", 1);
hash.Remove("A");
int myNum = (int)hash["A"];
3. HashSet<T>
- 키가 별도로 존재하지 않으며, 밸류로만 이루어져 있다.
- 순서가 존재하지 않으며, {0, 1, 2}는 {2, 1, 0} 과 같다.
- 각 항목의 중복을 허용하지 않는다.
HashSet<int> uniqueVals = new HashSet<int>();
uniqueVals.Add(1);
uniqueVals.Remove(1);
- Add함수의 bool 반환 값으로 중복여부를 알 수 있다.
if(hashset.Add(value))
// 삽입 성공
else
// 삽입 실패 (중복)
HashSet은 딱히 써보지 않았었는데,
의미 없는 키를 부여하거나 밸류와 동일한 키를 사용해서 Dictionary에 넣는 것보다
HashSet을 활용하는 게 나을 듯하다.
'🌍 C# Study > C# 케이스 스터디' 카테고리의 다른 글
C# string to enum (string 값 enum으로 변환하기) System.Enum.Parse (0) | 2021.09.21 |
---|---|
C# 인스턴스 초기화 순서 정리 (0) | 2021.05.09 |
C# 상속 클래스 부모의 생성자 호출 순서 (0) | 2021.04.26 |
C# 배열 연속 데이터 채우기 Enumerable.Range (0) | 2021.04.23 |
C# 인덱서 Indexer (0) | 2020.07.13 |