C# Hashtable 완전 정복: 키-값 저장, 연산, 실전 예제
C#에서 Hashtable이란?
Hashtable은 데이터를 키-값 쌍으로 저장하는 비제네릭 컬렉션입니다. 인덱스당 단일 값을 보유하는 배열이나 리스트와 달리, 해시테이블은 고유 키를 사용하여 값을 직접 조회할 수 있어 평균 O(1) 시간 복잡도로 검색 가능합니다.
일반적인 엔트리 예:
{ "001", ".Net" }
{ "002", "C#" }
{ "003", "ASP.Net" }
여기서 키는 "001", "002", "003"이고 해당 값은 ".Net", "C#", "ASP.Net"입니다.
아래에서 Hashtable과 함께 사용할 가장 일반적인 연산들을 살펴봅니다.
Hashtable 선언
Hashtable 타입과 new 키워드로 인스턴스화:
Hashtable ht = new Hashtable();
요소 추가
Add 메서드로 키-값 쌍 삽입. 키와 값 모두 제공해야 함:
ht.Add("001", ".Net");
ht.Add("002", "C#");
ht.Add("003", "ASP.Net");
예제 1 – 모든 값 표시
다음 콘솔 애플리케이션은 해시테이블 생성, 채우기, 각 값 출력 시연:

using System;
using System.Collections;
namespace DemoApplication {
class Program {
static void Main(string[] args) {
Hashtable ht = new Hashtable();
ht.Add("001", ".Net");
ht.Add("002", "C#");
ht.Add("003", "ASP.Net");
ICollection keys = ht.Keys;
foreach (String k in keys) {
Console.WriteLine(ht[k]);
}
Console.ReadKey();
}
}
}
설명
Hashtable 변수 ht 선언
Add로 키-값 쌍 추가
ht.Keys로 키 컬렉션 조회 (ICollection 반환)
- 키 반복하며
ht[key]로 연관된 값 출력
프로그램 실행 출력:

주요 메서드
ContainsKey
특정 키 존재 여부 확인:
ht.ContainsKey("001"); // 키 존재 시 true 반환
ContainsValue
특정 값이 해시테이블에 저장되어 있는지 확인:
ht.ContainsValue("C#"); // 값 발견 시 true 반환
예제 2 – ContainsKey & ContainsValue 사용
아래 간결한 프로그램은 두 메서드를 시연합니다:

using System;
using System.Collections;
namespace DemoApplication {
class Program {
static void Main(string[] args) {
Hashtable ht = new Hashtable();
ht.Add("001", ".Net");
ht.Add("002", "C#");
ht.Add("003", "ASP.Net");
Console.WriteLine(ht.ContainsKey("001")); // true
Console.WriteLine(ht.ContainsValue("C#")); // true
Console.ReadKey();
}
}
}
설명
ContainsKey로 "001" 존재 확인
ContainsValue로 "C#" 저장 확인
콘솔 출력:

핵심 요약
Hashtable은 요소를 키-값 쌍으로 저장하여 키를 알 때 빠른 조회를 가능하게 합니다. 현대 C#에서는 타입 안전성을 위해 제네릭 Dictionary<TKey, TValue>를 권장하지만, 레거시 코드와 상호 운용성 시나리오에서 Hashtable 이해는 여전히 가치가 있습니다.