學習 TList 類的實現 7

2021-09-05 18:45:20 字數 1924 閱讀 6099

總結目前 tmylist 已具備的功能(3 個方法、3 個屬性):

add: 新增;

delete: 刪除;

clear: 清空;

count: 元素總數;

capacity: 已存在的所有元素位置數;

list: 指向核心陣列的指標(唯讀).

舉例測試如下:

unit unit1;

inte***ce

uses

windows, messages, sysutils, variants, classes, graphics, controls, forms,

dialogs, stdctrls;

type

tform1 = class(tform)

procedure formcreate(sender: tobject);

end;

var form1: tform1;

implementation

uses mylist;

type

tmyrec = record

name: string[8];

age : word;

end;

procedure tform1.formcreate(sender: tobject);

var lista: tmylist;

r,r1,r2,r3,r4,r5: tmyrec;

begin

lista := tmylist.create;

showmessagefmt('%d,%d',[lista.count,lista.capacity]);

r1.name := '張三';

r1.age := 11;

lista.add(@r1);

showmessagefmt('%d,%d',[lista.count,lista.capacity]);

r2.name := '李四';

r2.age := 22;

lista.add(@r2);

r3.name := '王五';

r3.age := 33;

lista.add(@r3);

r4.name := '孫六';

r4.age := 44;

lista.add(@r4);

r5.name := '候七';

r5.age := 55;

lista.add(@r5);

showmessagefmt('%d,%d',[lista.count,lista.capacity]);

r := tmyrec(lista.list^[2]^);

showmessagefmt('%s:%d',[r.name, r.age]);

lista.delete(2);

r := tmyrec(lista.list^[2]^);

showmessagefmt('%s:%d',[r.name, r.age]);

lista.clear;

showmessagefmt('%d,%d',[lista.count,lista.capacity]);

lista.free;

end;

end.

從上面的例子可以看出, 現在要訪問乙個元素真不容易: r := tmyrec(lista.list^[2]^);

理解一下:

lista.list 是那個核心陣列的指標, 要表示那個陣列應該用: lista.list^

陣列的第二個元素 lista.list^[2], 又是指向元素的指標, 獲取元素應該用: lista.list^[2]^

還有轉換成可以識別的物件: tmyrec(lista.list^[2]^);

應盡早新增 tmyrec.items[i] 陣列屬性來訪問元素, 不然麻煩透了!

學習 TList 類的實現 2

我原來以為 tlist 可能是乙個鍊錶,其實只是乙個陣列而已.你知道它包含著多大乙個陣列嗎?maxlistsize 個 maxlistsize 是 delphi 在 classes 單元定義的乙個常量 maxlistsize maxint div 16 也就是 134217727 這也是 tlist...

學習 TList 類的實現 6

實現 tmylist.add 函式.tlist 中的 add 函式用到了乙個 grow 方法,它的原理是元素越多就為以後準備更多記憶體,我們這裡省略為預留 4 個元素的記憶體 tlist 中的 add 函式還同時觸動了乙個 notify 方法,這應該是為它們的子類準備的 估計是用它來激發乙個事件的 ...

JVM學習筆記7 類的解除安裝

指類從記憶體中登出掉,登出完成後將不能再建立類的例項物件 當mysample類載入,連線和初始化後,它的生命週期就開始了.若代表mysample類的class物件不再被引用,即不可觸及時,class物件就會結束生命週期,mysample類在方法區內的資料也會被解除安裝,從而結束mysample類的生...