📄 hashingexamplemain.pas
字号:
unit HashingExampleMain;
interface
uses
{$IFDEF WIN32}
Windows, Messages, Graphics, Controls, Forms, Dialogs, StdCtrls,
{$ENDIF}
{$IFDEF LINUX}
QForms, QControls, QStdCtrls,
{$ENDIF}
SysUtils, Classes;
type
TMainForm = class(TForm)
btnIntfIntfHashMap: TButton;
btnIntfHashSet: TButton;
btnHashMap: TButton;
btnHashSet: TButton;
btnStrIntfHashMap: TButton;
btnIntfArraySet: TButton;
btnArraySet: TButton;
btnStrStrHashMap: TButton;
btnStrHashMap: TButton;
btnStrHashSet: TButton;
btnStrArraySet: TButton;
memResult: TListBox;
procedure btnIntfIntfHashMapClick(Sender: TObject);
procedure btnStrIntfHashMapClick(Sender: TObject);
procedure btnHashMapClick(Sender: TObject);
procedure btnIntfHashSetClick(Sender: TObject);
procedure btnHashSetClick(Sender: TObject);
procedure btnIntfArraySetClick(Sender: TObject);
procedure btnArraySetClick(Sender: TObject);
procedure btnStrStrHashMapClick(Sender: TObject);
procedure btnStrHashMapClick(Sender: TObject);
procedure btnStrHashSetClick(Sender: TObject);
procedure btnStrArraySetClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
IIntfMyObject = interface
['{B2CB604F-4F5F-44D8-A86F-6138CD329B42}']
function GetInt: Integer;
function GetStr: string;
procedure SetInt(Value: Integer);
procedure SetStr(const Value: string);
property Int: Integer read GetInt write SetInt;
property Str: string read GetStr write SetStr;
end;
TIntfMyObject = class(TInterfacedObject, IIntfMyObject)
private
FInt: Integer;
FStr: string;
protected
{ IIntfMyObject }
function GetInt: Integer;
function GetStr: string;
procedure SetInt(Value: Integer);
procedure SetStr(const Value: string);
end;
TMyObject = class(TObject)
private
FInt: Integer;
FStr: string;
public
property Int: Integer read FInt write FInt;
property Str: string read FStr write FStr;
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
uses JclContainerIntf, JclHashMaps, JclHashSets, JclArraySets;
{ TIntfMyObject }
function TIntfMyObject.GetInt: Integer;
begin
Result := FInt;
end;
function TIntfMyObject.GetStr: string;
begin
Result := FStr;
end;
procedure TIntfMyObject.SetInt(Value: Integer);
begin
FInt := Value;
end;
procedure TIntfMyObject.SetStr(const Value: string);
begin
FStr := Value;
end;
procedure TMainForm.btnIntfIntfHashMapClick(Sender: TObject);
var
Map: IJclIntfIntfMap;
MyObject: IIntfMyObject;
KeyObject: TInterfacedObject;
It: IJclIntfIterator;
begin
Map := TJclIntfIntfHashMap.Create;
MyObject := TIntfMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
KeyObject := TInterfacedObject.Create;
Map.PutValue(KeyObject, MyObject);
MyObject := IIntfMyObject(Map.GetValue(KeyObject));
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
It := Map.Values.First;
while It.HasNext do
memResult.Items.Add(IIntfMyObject(It.Next).Str);
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnStrIntfHashMapClick(Sender: TObject);
var
Map: IJclStrIntfMap;
MyObject: IIntfMyObject;
begin
Map := TJclStrIntfHashMap.Create;
MyObject := TIntfMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
Map.PutValue('MyKey', MyObject);
MyObject := TIntfMyObject.Create;
MyObject.Int := 43;
MyObject.Str := 'AnotherString';
Map.PutValue('MyKey2', MyObject);
MyObject := IIntfMyObject(Map.GetValue('MyKey2'));
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnHashMapClick(Sender: TObject);
var
Map: IJclMap;
MyObject: TMyObject;
KeyObject: TObject;
It: IJclIterator;
begin
Map := TJclHashMap.Create;
MyObject := TMyObject.Create;
KeyObject := TObject.Create;
try
MyObject.Int := 42;
MyObject.Str := 'MyString';
Map.PutValue(KeyObject, MyObject);
MyObject := TMyObject(Map.GetValue(KeyObject));
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
It := Map.Values.First;
while It.HasNext do
memResult.Items.Add(TMyObject(It.Next).Str);
memResult.Items.Add('--------------------------------------------------------');
finally
// MyObject.Free; // Free in the map (Default: OwnsObject = True)
// KeyObject.Free;
end;
end;
procedure TMainForm.btnIntfHashSetClick(Sender: TObject);
var
MySet: IJclIntfSet;
MyObject: IIntfMyObject;
It: IJclIntfIterator;
begin
MySet := TJclIntfHashSet.Create;
MyObject := TIntfMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
MySet.Add(MyObject);
MySet.Add(MyObject);
It := MySet.First;
while It.HasNext do
memResult.Items.Add(IIntfMyObject(It.Next).Str);
memResult.Items.Add(IntToStr(MySet.Size));
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnHashSetClick(Sender: TObject);
var
MySet: IJclSet;
MyObject: TMyObject;
It: IJclIterator;
begin
MySet := TJclHashSet.Create;
MyObject := TMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
MySet.Add(MyObject);
MySet.Add(MyObject);
It := MySet.First;
while It.HasNext do
memResult.Items.Add(TMyObject(It.Next).Str);
memResult.Items.Add(IntToStr(MySet.Size));
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnIntfArraySetClick(Sender: TObject);
var
MySet: IJclIntfSet;
MyObject: IIntfMyObject;
It: IJclIntfIterator;
begin
MySet := TJclIntfArraySet.Create;
MyObject := TIntfMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
MySet.Add(MyObject);
MySet.Add(MyObject);
It := MySet.First;
while It.HasNext do
memResult.Items.Add(IIntfMyObject(It.Next).Str);
memResult.Items.Add(IntToStr(MySet.Size));
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnArraySetClick(Sender: TObject);
var
MySet: IJclSet;
MyObject: TMyObject;
It: IJclIterator;
begin
MySet := TJclArraySet.Create;
MyObject := TMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
MySet.Add(MyObject);
MySet.Add(MyObject);
It := MySet.First;
while It.HasNext do
memResult.Items.Add(TMyObject(It.Next).Str);
memResult.Items.Add(IntToStr(MySet.Size));
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnStrStrHashMapClick(Sender: TObject);
var
Map: IJclStrStrMap;
It: IJclStrIterator;
begin
Map := TJclStrStrHashMap.Create;
Map.PutValue('MyKey1', 'MyString1');
Map.PutValue('MyKey2', 'MyString2');
Map.PutValue('MyKey3', 'MyString3');
It := Map.KeySet.First;
while It.HasNext do
memResult.Items.Add(It.Next);
It := Map.Values.First;
while It.HasNext do
memResult.Items.Add(It.Next);
Map.PutValue('MyKey2', 'AnotherString2');
memResult.Items.Add(Map.GetValue('MyKey2'));
memResult.Items.Add('--------------------------------------------------------');
end;
type
TLinks = class(TJclStrHashMap);
procedure TMainForm.btnStrHashMapClick(Sender: TObject);
var
Map: IJclStrMap;
MyObject: TMyObject;
//It: IJclStrIterator;
Links: TLinks;
begin
Map := TJclStrHashMap.Create;
MyObject := TMyObject.Create;
MyObject.Int := 42;
MyObject.Str := 'MyString';
{ Map.PutValue('MyKey1', MyObject);
MyObject := TMyObject(Map.GetValue('MyKey1'));
memResult.Items.Add(IntToStr(MyObject.Int) + ' ' + MyObject.Str);
It := Map.KeySet.First;
while It.HasNext do
memResult.Items.Add(It.Next);
memResult.Items.Add('--------------------------------------------------------');
}
Links := TLinks.Create;
Links.PutValue('MyKey1', MyObject);
Links.Remove('MyKey1');
Links.PutValue('MyKey1', MyObject);
end;
procedure TMainForm.btnStrHashSetClick(Sender: TObject);
var
MySet: IJclStrSet;
It: IJclStrIterator;
begin
MySet := TJclStrHashSet.Create;
MySet.Add('MyString');
MySet.Add('MyString');
It := MySet.First;
while It.HasNext do
memResult.Items.Add(It.Next);
memResult.Items.Add(IntToStr(MySet.Size));
memResult.Items.Add('--------------------------------------------------------');
end;
procedure TMainForm.btnStrArraySetClick(Sender: TObject);
var
MySet: IJclStrSet;
It: IJclStrIterator;
I: Integer;
begin
MySet := TJclStrArraySet.Create;
for I := 1 to 8 do
MySet.Add(IntToStr(I));
for I := 8 downto 1 do
MySet.Add(IntToStr(I));
MySet.Add('MyString');
MySet.Add('MyString');
It := MySet.First;
while It.HasNext do
memResult.Items.Add(It.Next);
memResult.Items.Add(IntToStr(MySet.Size));
memResult.Items.Add('--------------------------------------------------------');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -