C#에서 HashSet에 저장된 요소의 개수를 확인하려면 Count 속성을 사용하면 됩니다. Count는 컬렉션에 실제로 저장된 고유한 요소의 개수를 반환하며, O(1)의 시간 복잡도로 매우 빠르게 동작합니다.
아래 예제를 통해 HashSet의 요소 수를 구하는 방법과 함께 Overlaps(), Contains(), IsSupersetOf() 같은 유용한 메서드들도 함께 살펴보겠습니다.
예제 1: 정수형 HashSet의 Count 사용하기
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
HashSet<int> set1 = new HashSet<int>();
set1.Add(25);
set1.Add(50);
set1.Add(75);
set1.Add(100);
set1.Add(125);
set1.Add(150);
Console.WriteLine("HashSet1의 요소");
foreach(int val in set1) {
Console.WriteLine(val);
}
Console.WriteLine("HashSet1의 요소 개수 = " + set1.Count);
HashSet<int> set2 = new HashSet<int>();
set2.Add(30);
set2.Add(60);
set2.Add(100);
set2.Add(150);
set2.Add(200);
set2.Add(250);
Console.WriteLine("HashSet2의 요소");
foreach(int val in set2) {
Console.WriteLine(val);
}
Console.WriteLine("HashSet2의 요소 개수 = " + set2.Count);
Console.WriteLine("두 집합은 공통 요소를 가지고 있는가? " + set1.Overlaps(set2));
Console.WriteLine("HashSet1에 요소 60이 존재하는가? " + set1.Contains(60));
Console.WriteLine("HashSet2에 요소 60이 존재하는가? " + set2.Contains(60));
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
HashSet1의 요소 25 50 75 100 125 150 HashSet1의 요소 개수 = 6 HashSet2의 요소 30 60 100 150 200 250 HashSet2의 요소 개수 = 6 두 집합은 공통 요소를 가지고 있는가? True HashSet1에 요소 60이 존재하는가? False HashSet2에 요소 60이 존재하는가? True
코드 설명
- Count 속성: HashSet에 포함된 고유 요소의 개수를 반환합니다.
- Overlaps() 메서드: 두 HashSet이 최소 하나 이상의 공통 요소를 가지고 있는지 확인합니다. 위 예제에서 두 집합 모두 100과 150을 포함하므로
True가 출력됩니다. - Contains() 메서드: 특정 요소가 집합에 존재하는지 여부를 판별합니다.
예제 2: 문자열 HashSet과 IsSupersetOf 메서드
다음으로 문자열을 저장하는 HashSet을 활용한 또 다른 예제입니다. 중복 값 추가 시 HashSet이 어떻게 동작하는지도 확인할 수 있습니다.
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
HashSet<string> set1 = new HashSet<string>();
set1.Add("AB");
set1.Add("CD");
set1.Add("EF");
set1.Add("AB");
set1.Add("IJ");
set1.Add("KL");
set1.Add("EF");
set1.Add("OP");
Console.WriteLine("HashSet1의 요소");
foreach(string val in set1) {
Console.WriteLine(val);
}
Console.WriteLine("HashSet1의 요소 개수 = " + set1.Count);
HashSet<string> set2 = new HashSet<string>();
set2.Add("EF");
set2.Add("KL");
Console.WriteLine("HashSet2의 요소 개수 = " + set2.Count);
Console.WriteLine("HashSet2의 요소");
foreach(string val in set2) {
Console.WriteLine(val);
}
Console.WriteLine("set1은 set2의 상위집합인가? " + set1.IsSupersetOf(set2));
}
}출력 결과
HashSet1의 요소 AB CD EF IJ KL OP HashSet1의 요소 개수 = 6 HashSet2의 요소 개수 = 2 HashSet2의 요소 EF KL set1은 set2의 상위집합인가? True
코드 설명
주목할 점은 set1에 "AB"와 "EF"를 각각 두 번씩 추가했지만, 최종 요소 개수는 8개가 아닌 6개라는 것입니다. HashSet은 이름 그대로 중복을 허용하지 않는 자료구조이기 때문에, 이미 존재하는 값을 다시 추가하면 무시됩니다.
IsSupersetOf() 메서드는 현재 집합이 지정된 다른 집합의 상위집합인지 확인합니다. set1이 set2의 모든 요소(EF, KL)를 포함하고 있으므로 True가 반환됩니다.
정리
C# HashSet의 요소 개수를 알고 싶다면 Count 속성 하나만 기억하면 됩니다. 또한 HashSet은 중복 제거, 집합 연산(교집합, 합집합, 부분집합 검사 등)에 유용하게 활용할 수 있으며, 관련 메서드로 Overlaps(), Contains(), IsSupersetOf() 등을 적절히 조합하면 효율적인 데이터 처리가 가능합니다.