[CS] List vs HashSet
๐ก List ์ HashSet์ ์ฐจ์ด์ ? ๋ญ๊ฐ ๋ค๋ฅด์ง
์ด ๋๊ฐ์ ์ปฌ๋ ์ ์๋ ๋๋ค ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ์บ๋์ ์ธ๋ฐ, ์ธ์ ์ด๋ป๊ฒ ์ฐ์ด๋์ง ์กฐ๊ธ์ ๋ค๋ฅธ๋ฐ ํ๋ฒ ์์๋ณด์!
๐ ๊ฐ๋จ ๋น๊ตํ
| ํญ๋ชฉ | List<T> | HashSet<T> |
|---|---|---|
| ๋ด๋ถ ๊ตฌ์กฐ | ๋ฐฐ์ด (Array ๊ธฐ๋ฐ) | ํด์ ํ ์ด๋ธ (Hash Table ๊ธฐ๋ฐ) |
| ์ค๋ณต ํ์ฉ | โ ํ์ฉํจ | โ ์ค๋ณต ํ์ฉ ์ ํจ |
| ์ ๋ ฌ ์ ์ง | โ ์ธ๋ฑ์ค ์์ ์ ์ง | โ ์์ ๋ณด์ฅ ์ ํจ |
| ํ์ ์๋ | โ ๋๋ฆผ (O(n)) | โ
๋น ๋ฆ (O(1) ํ๊ท ) |
| ์ฃผ์ ๋ชฉ์ | ์์ฐจ์ ์ ๊ทผ, ์ ๋ ฌ๋ ๋ฐ์ดํฐ | ์ค๋ณต ์ ๊ฑฐ, ๋น ๋ฅธ ํฌํจ ์ฌ๋ถ ์ฒดํฌ |
๐ 1. List<T>๋ ์ธ์ ์ฐ๋?
List<T>๋ ๊ฐ์ฅ ๋ฒ์ฉ์ ์ธ ์ปฌ๋ ์
- ์์๊ฐ ์ค์ํ ๋
- ์ธ๋ฑ์ค๋ก ์ ๊ทผํด์ผ ํ ๋
- ์ค๋ณต์ด ํ์ฉ๋ ๋
1 2 3 4
var list = new List<string>(); list.Add("apple"); list.Add("apple"); Console.WriteLine(list.Count); // 2 (์ค๋ณต ํ์ฉ)
list.Contains("apple")์ฒ๋ผ ์ด๋ค ๊ฐ์ด ํฌํจ๋์ด ์๋์ง ํ์ธํ ์๋ ์์ง๋ง, ์ด๊ฑด ๋ด๋ถ์ ์ผ๋ก ์ฒ์๋ถํฐ ๋๊น์ง ์ํํ๋ฉด์๋น๊ตํ๊ธฐ ๋๋ฌธ์
์ฑ๋ฅ์ ๋๋ฆด ์ ์๋ค! ์ฆ, ์๊ฐ ๋ณต์ก๋๋O(n)
๐ 2. HashSet<T>๋ ์ธ์ ์ฐ๋?
HashSet<T>๋ ์ค๋ณต์ ๊ฑฐ ์ ๋น ๋ฅธ ํ์์ ํนํ๋จ
- ๋น ๋ฅด๊ฒ ํ์์ ํด์ผํ ๊ฒฝ์ฐ
- ์ค๋ณต์ด ํ์ฉ๋์ง ์์๋
1
2
3
4
5
6
var set = new HashSet<string>();
set.Add("apple");
set.Add("apple");
Console.WriteLine(set.Count); // 1 (์ค๋ณต ์ ๊ฑฐ๋จ)
Console.WriteLine(set.Contains("apple")); // O(1) ์์ค์ ๋น ๋ฅธ ํ์
๋ด๋ถ์ ์ผ๋ก๋ ํด์ ํ ์ด๋ธ(Hash Table)์ ์ด์ฉํด์ ์ค๋ณต ์ฒดํฌ์ ํ์์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ
๋จ์ ์ ์์๋ฅผ ๋ณด์ฅํ์ง ์๋๋ค๋ ๊ฒ. ์์๊ฐ ์ค์ํ๋ค๋ฉด
List๊ฐ ๋ ์ ํฉ
๐ ์ธ์ ์ด๋ค ๊ฑธ ์จ์ผ ํ ๊น?
| ์ํฉ | ์ถ์ฒ ์ปฌ๋ ์ |
|---|---|
| ์ค๋ณต๋ ๊ฐ์ ํ์ฉํด์ผ ํ ๋ | List<T> |
| ์ค๋ณต์ ์๋์ผ๋ก ์ ๊ฑฐํ๊ณ ์ถ์ ๋ | HashSet<T> |
| ์์์ ์์(์ ๋ ฌ๋ ์์)๊ฐ ์ค์ํ ๋ | List<T> |
| ๊ฐ์ด ํฌํจ๋์ด ์๋์ง ๋น ๋ฅด๊ฒ ํ์ธํด์ผ ํ ๋ | HashSet<T> |
๐ ์ํฉ์ ๋ง๋ ์ปฌ๋ ์ ์ ์ ํํด์ ์ฑ๋ฅ๊ณผ ํจ์จ์ ๋ชจ๋ ์ฑ๊ฒจ๋ณด์ธ์!
