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
我正在寻找整数列表与整数哈希集之间的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