.NET Fast Lookup
A guide for fast lookup APIs leveraging O(1) time complexity.
Quick Reference: See QUICKREF.md for essential patterns at a glance.
- Core APIs
API Time Complexity Features
HashSet<T>
O(1) Mutable, no duplicates
FrozenSet<T>
O(1) Immutable, .NET 8+
Dictionary<K,V>
O(1) Mutable, Key-Value
FrozenDictionary<K,V>
O(1) Immutable, .NET 8+
- HashSet
// O(1) time complexity for existence check var allowedIds = new HashSet<int> { 1, 2, 3, 4, 5 };
if (allowedIds.Contains(userId)) { // Allowed user }
// Set operations setA.IntersectWith(setB); // Intersection setA.UnionWith(setB); // Union setA.ExceptWith(setB); // Difference
- FrozenSet (.NET 8+)
using System.Collections.Frozen;
// Immutable fast lookup (read-only scenarios) var allowedExtensions = new[] { ".jpg", ".png", ".gif" } .ToFrozenSet(StringComparer.OrdinalIgnoreCase);
if (allowedExtensions.Contains(fileExtension)) { // Allowed extension }
- Dictionary<K,V> Optimization
// ❌ Two lookups if (dict.ContainsKey(key)) { var value = dict[key]; }
// ✅ Single lookup if (dict.TryGetValue(key, out var value)) { // Use value }
// Lookup with default value var value = dict.GetValueOrDefault(key, defaultValue);
- Comparer Optimization
// Case-insensitive string comparison var set = new HashSet<string>(StringComparer.OrdinalIgnoreCase); set.Add("Hello"); set.Contains("HELLO"); // true
- When to Use
Scenario Recommended Collection
Frequently modified set HashSet<T>
Read-only configuration data FrozenSet<T>
Frequent existence checks HashSet<T> / FrozenSet<T>
Key-Value cache Dictionary<K,V>
Static mapping table FrozenDictionary<K,V>
- References
-
HashSet
-
FrozenSet