C#

[C#] LinkedList, HashSet, Dictionary

도도돋치 2025. 4. 2. 21:29
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