Subject:
TCnStrToPtrHashMap 问题
[Print This Page]
Author:
wuyou
Time:
2010-3-26 22:44
Subject:
TCnStrToPtrHashMap 问题
var
count: integer;
map : TCnStrToPtrHashMap;
p : Pointer
begin
count := 3;
//如果分配得刚刚好,下面就出错
map := TCnStrToPtrHashMap.Create(count);
//而如果:多分配几个空间,下面就没有问题
map := TCnStrToPtrHashMap.Create(count+1);
map.Add('01', @map);
map.Add('02', @map);
map.Add('03', @map);
//下面返回是 False
Map.Find('01', p);
end;
Author:
zjy
Time:
2010-3-29 11:39
Subject:
多谢报告!
经检查,这确实是一个Bug,已经修正:
http://code.google.com/p/cnpack/source/detail?r=469
建议您通过SVN更新到最新版本使用。
另外,HashMap 是一种空间换时间的算法,通常为 Hash 表分配的项目数应数倍于预期需要保存的项目数,否则会因为 Hash 值碰撞重定位带来性能的严重下降。
虽然 HashMap 在增加子项时会自动增长存储空间,但增长的效率较低,所以建议使用 HashMap 时如果能估算出列表项目数,可以在创建 HashMap 时取2-5倍或更多的项目数来初始化。
PS:在贴出的代码中,@map取的是map变量的地址(局部变量在堆栈上的地址),而不是map对象的地址,如果需求是保存对象的话,应该直接用 map 而不是 @map。
Author:
wuyou
Time:
2010-4-3 11:15
谢谢!回复得不错,受教了
PS:在贴出的代码中,@map 只是一个例子,没有什么特别的意思
不过学是学到一招
Welcome to CnPack Forum (http://bbs.cnpack.org/)
Powered by Discuz! 5.0.0