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;
