TFPCustomHashTable 构造函数使用 196613 常量。为什么使用这个特定值?

TFPCustomHashTable constructor use 196613 constant. Why use this particular value?

以下代码是 FreePascalcontnrs 单元的一部分

constructor TFPCustomHashTable.Create;
begin
  CreateWith(196613,@RSHash);
end;

我很好奇196613。我知道它是 hash table 大小。使用这个值有什么特别的原因吗?

在我的测试中,构造函数大约需要 3-4 毫秒才能执行,这在我的特定情况下是不可接受的。我怀疑这与这个常数值有关。

更新:

我的问题是:

196613 是推荐用于散列 tables 大小(质数和远离 2 的幂)的数字之一,有关更多信息,请参见例如https://planetmath.org/goodhashtableprimes.

它影响构造函数调用执行时间,是的。您始终可以使用 CreateWith 构造 TFPCustomHashTable 并传递您选择的大小(任何数字都可以,因为调整大小算法会检查 suitable 大小)以及您自己的哈希函数(或预定义的 RSHash):

MyHashTable:=TFPCustomHashTable.CreateWith(193,@RSHash);

不过请记住,调整散列大小 table 是一项昂贵的操作,因为它需要重新计算所有元素的散列函数,因此从太小的值开始既不是一个好主意。