總結目前 tmylist 已具備的功能(3 個方法、3 個屬性):
add: 新增;
delete: 刪除;
clear: 清空;
count: 元素總數;
capacity: 已存在的所有元素位置數;
list: 指向核心陣列的指標(唯讀).
舉例測試如下:
unit unit1;從上面的例子可以看出, 現在要訪問乙個元素真不容易: r := tmyrec(lista.list^[2]^);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.
理解一下:
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類的生...