Delphi中Hash表的使用方法(THashedStringlist)

Posted on 2011-05-06 17:27  严武  阅读(5556)  评论(2编辑  收藏  举报

TStringList是我们常用的字符串列表类型,用法就不在这里赘述,但是,在其数据项数增多时,其搜索(主要是name/key搜索和indexof搜索)性能会急剧下降,原因是TStringList的内部存储使用了链表形式,而搜索操作使用了循环遍历方式。

值得高兴的是,在iniFiles单元,Delphi为我们提供了THashedStringList类型,即,经过哈希处理的TStringList,它继承自TStringList,只是对搜索方法进行了优化,因此,我们完全可以放心的在大量字符串搜索的时候使用它来代替TStringList,而需要改变的只是在:=的后面用THashedStringList.create来代替TStringList.create,但其速度却提高了一个数量级。

在Delphi中有一个THashedStringlist类,使用这个类可以实现Hash表的操作.使用这个类需要引用IniFiles头文件.

例如:我们定义的数据结构是:

 

RTest = record
Key:Integer;
Name:String[
20];
Sex:Boolean;
Age:Integer;
end;
PTest
= ^RTest ;

1:创建Hash表.
ScHash:=THashedStringlist.Create;

2:将数据结构加入Hash表中.
var
Index:Integer;
p_Test:PTest;
Index:
=ScHash.IndexOf(IntToStr(p_Test.Key));
if Index=-1 then
begin
ScHash.AddObject(IntToStr(p_Test.Key),TObject(Integer(p_Test)));
end;

 

在加入Hash表的时候,首先我们检查看这个Key是否在Hash表中,如果Index=-1则说明此Key不在Hash表中,则我们将这个结构指针加入到Hash表中.


将数据结构从Hash表中删除.

 

var
Index:Integer;
t_Object: TObject;
Index:
=ScHash.IndexOf(IntToStr(p_Test.Key));
if Index<>-1 then
begin
t_Object:
=ScHash.Objects[Index];
ScHash.Delete(Index);
end;

 


删除Hash表

在删除Hash表的时候和一般的Tlist删除一样,使用Free.

 

ScHash.Free;

 

Copyright © 2024 严武
Powered by .NET 9.0 on Kubernetes