当键是字符串并且字符串包含空格时,搜索HashTable会变慢

Mic*_*out 1 .net string hashtable

今天我和其他开发人员讨论了第三方库中的限制,我们不能在字符串中使用空格.原因是字符串在.NET Hashtable中用作键,并且当键包含空格时,搜索.NET HashTable的速度明显变慢.

既然我懒得写一个测试,但我仍然想知道为什么会这样,我在这里问我的问题:

当使用的字符串包含空格时,搜索Hashtable会变慢吗?

我不希望这样,因为在执行搜索之前,使用String.GetHashCode()获取散列,然后使用该散列来定位表中的条目.

谢谢!

GvS*_*GvS 5

直接来自Rotor源,String.GetHashcode方法的核心:

                int     c;
                char *s = src;
                while ((c = s[0]) != 0) {
                    hash1 = ((hash1 << 5) + hash1) ^ c;
                    c = s[1];
                    if (c == 0)
                        break;
                    hash2 = ((hash2 << 5) + hash2) ^ c;
                    s += 2;
                }
Run Code Online (Sandbox Code Playgroud)

我可以弥补这一点:空间没有得到任何特殊处理.

结论:

  • 第三方不使用HashTable或将字符串包装到字符串以使空格更慢.
  • 或者他们试图通过讲故事来混淆他们的实现.