测一下Hashtable的排序规则

来源:互联网 发布:c语言中 ifdef win32 编辑:程序博客网 时间:2024/05/16 06:16

表面上是无规律的,实际上还是有规律的。

 

 

结果如下:

============Hashtable Test=================
Hk(key):0004,Key:4
Hk(key):0005,Key:5
Hk(key):0006,Key:6
Hk(key):0001,Key:1
Hk(key):0003,Key:3
add all
============Hashtable Test=================
Hk(key):0004,Key:4
Hk(key):0005,Key:5
Hk(key):0006,Key:6
Hk(key):0001,Key:1
Hk(key):0003,Key:3
hashC.Remove('0');
============Hashtable Test=================
Hk(key):0004,Key:4
Hk(key):0005,Key:5
Hk(key):0006,Key:6
Hk(key):0001,Key:1
Hk(key):0003,Key:3
hashC.Remove('0');
============Hashtable Test=================
Hk(key):0005,Key:5
Hk(key):0006,Key:6
Hk(key):0001,Key:1
Hk(key):0003,Key:3
hashC.Remove('4');
============Hashtable Test=================
Hk(key):0005,Key:5
Hk(key):0006,Key:6
Hk(key):0001,Key:1
Hk(key):0003,Key:3
hashC.Remove('4');
============Hashtable Test=================
Hk(key):0005,Key:5
Hk(key):0006,Key:6
Hk(key):0001,Key:1
Hk(key):0002,Key:2
Hk(key):0003,Key:3
hashC.Add('2');

[1]测试了键值hashcode无冲突情况
[2]容量指定为第一个给定素数=7
[3]内部停留指针所在的位置:最后操作的位置向下移动一格
[4]Foreach时,从HeadPos开始,按顺序输出,容器可以看作一个环形队列
[5]字符的hashcode与Hk(key)完全一样

 

Hashcode分配规律:
[1]默认值的情况
3(素数表中的第一个情况)

 

[2]给定初始值的情况
如果给定初始值,它会在素数表中找比设置大小大的数的最小值。

 

[3]自然增长的情况
首个3,再表中取比这个数的两倍大的最小值,依次类推。

3->7->17->37->89->197->431->919->1931->4049->8419->17519->36353->75431->...

 

[4]给定初始值自然增长情况
参照[3],区别在于首字符的设定

[5]素数间隔
从23开始,后一个素数/前一个素数,约等于1.2

原创粉丝点击