HashSet<int> 中针对包含 Contains 的 List<int> 的哈希性能

Hashing performance in a HashSet<int> against a List<int> with Contains

我正在寻找整数列表与整数哈希集之间的comparison/performance注意事项。这就是 What is the difference between HashSet<T> and List<T>? 所说的 T 作为整数。

我最多会有几千个整数,我想找出,对于单个整数,它们是否包含在这个集合中。

现在当然需要散列集,但我想知道散列在这里是否有益,因为它们只是整数开始。首先对它们进行哈希处理不会在这里增加不必要的开销吗?

或者换句话说:使用哈希集是否有益,即使是整数集?

散列一个整数非常便宜,正如您在 Int32.GetHashCode 方法的源代码中看到的那样:

// The absolute value of the int contained.
public override int GetHashCode()
{
    return m_value;
}

数字的哈希值就是数字本身。没有比这更便宜的了。所以没有理由担心开销。将您的数字放在 HashSet 中,享受 O(1) 计算复杂度的搜索。

无论 T 是什么,都有一个简单但有效的经验法则:

  • 集合主要用于添加和迭代,很少 搜索 => 使用列表

  • 该集合大量用于研究 => 使用 HashSet