Contents
접기
728x90
기본 개념
리스트(List<T>)는 동적 크기 조정이 가능하고 사용하기 편리하지만, 특정 상황에서는 더 나은 대안이 있다.
LinkedList<T> – 노드 기반 연결 리스트
🏷 LinkedList<T>는 연결 리스트(Linked List) 구조로 중간 삽입/삭제가 빈번할 때 리스트보다 더 효율적
📌 언제 LinkedList<T>가 좋은가?
- 삽입/삭제가 빈번할 때 → List<T>는 중간 삽입/삭제 시 요소들을 이동해야 하지만, LinkedList<T>는 빠름
- 순차 접근보다는 노드 이동이 중요할 때 → List<T>는 O(1) 랜덤 접근이 가능하지만, LinkedList<T>는 O(n)
예제 코드: LinkedList<T> 사용
LinkedList<int> linkedList = new LinkedList<int>();
linkedList.AddLast(1);
linkedList.AddLast(2);
linkedList.AddLast(3);
linkedList.AddFirst(0); // 맨 앞에 추가
foreach (var item in linkedList)
{
Console.Write(item + " "); // 출력: 0 1 2 3
}
🔹LinkedList<T>는 중간 삽입/삭제가 빠름
HashSet<T> – 중복 없는 데이터 저장
🏷 HashSet<T>는 중복을 허용하지 않는 데이터를 저장할 때 리스트보다 훨씬 효율적
📌 언제 HashSet<T>가 좋은가?
- 중복을 방지하고 싶을 때 → 리스트는 중복된 값이 들어갈 수 있지만, HashSet<T>는 자동으로 중복 제거
- 데이터 검색 속도가 중요할 때 → List<T>의 Contains()는 O(n)이지만, HashSet<T>는 평균 O(1)
예제 코드: HashSet<T> 사용
HashSet<int> set = new HashSet<int> { 1, 2, 3, 3, 4, 4 };
Console.WriteLine(string.Join(", ", set)); // 출력: 1, 2, 3, 4
Console.WriteLine(set.Contains(3)); // 출력: True
🔹중복 제거 & 빠른 검색 가능
Dictionary<TKey, TValue> – 키-값 쌍 저장
🏷 Dictionary<TKey, TValue>는 키-값 쌍을 저장하는 자료구조로 특정 키에 대한 값을 빠르게 찾을 때 유용
📌 언제 Dictionary<TKey, TValue>가 좋은가?
- 리스트에서 특정 값을 찾는 데 시간이 오래 걸릴 때 → List<T>는 O(n), Dictionary<TKey, TValue>는 O(1)
- 데이터를 키로 구분해야 할 때 → 예: 학생 번호(Key)와 이름(Value)
예제 코드: Dictionary<TKey, TValue> 사용
Dictionary<int, string> students = new Dictionary<int, string>
{
{ 1, "도치" },
{ 2, "장도도치" },
{ 3, "도돋치" }
};
Console.WriteLine(students[2]); // 출력: 장도도치
🔹빠른 검색 & 키-값 형태의 데이터 관리
📖 정리
자료구조 | 리스트보다 좋은 점 | 언제 사용하면 좋은가? |
LinkedList<T> | 삽입/삭제 빠름 | 중간 삽입/삭제가 잦을 때 |
HashSet<T> | 중복 제거, 빠른 검색 | 중복 없는 데이터 저장 & 검색 |
Dictionary<TKey, TValue> | 빠른 키-값 검색 | 특정 키로 데이터를 찾을 때 |
728x90