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


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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM