Оглавление:
1. Определение TList.
2. Свойства
3. Методы
4. Примечания
5. Пример
6. Литература
Класс TList
позволяет создать набор из
произвольного количества
элементов и организовать индексный
способ доступа к ним, как это
делается при работе с массивом.
Списки отличаются от массивов.
Во-первых, их размер динамически
меняться в ходе работы программы,
фактически ограничиваясь лишь
доступной памятью. Во-вторых, в
списках могут храниться элементы
разных типов, например
наследованных от TObject.
Технически списки представляют
собой массивы нетипизированых
указателей на размещенные в
динамической памяти элементы. Эти
массивы размещаются в куче, что даёт возможность
динамического изменения размеров
списков; с другой стороны, входящие
в списки нетипизированные
указатели позволяют ссылаться на
элементы произвольного типа.
TList позволяет:
Свойства элемента TList (property):
Свойство | Тип | Назначение |
Capacity | Integer | "Застолбить" память под некоторое количество указателей. Всегда больше Count |
Count | Integer | Показывает количество элементов в списке |
Items | Array[x]:Pinter | Доступ к отдельным элементам в списке по их индексам. Индексы нумеруются с нуля |
List | PPointerList | Возвращает адрес массива указателей на элементы списка |
Методы элемента TList (methods):
Метод | Параметры | Назначение |
Add | Item : Pointer | Добавляет в конец списка элемент. Возвращает его индекс |
Clear | - - - | Очищает список. Сами элементы не удаляет, удаляет лишь указатели на них |
Delete | Index : Integer | Удаляет элемент с индексом Index, cсдвигая остальные на его место |
Destroy | - - - | Удаляет образец TList. Для внутреннего использования |
Error | (см. документацию) | Вызывает исключительную ситуацию EListError |
Exchange | Index1 , Index2 : Integer | Меняет местами элементы соответственных индексов |
Expand | - - - | Увеличивает capacity |
Extract | Item : Pointer | Удаляет элемент из списка |
First | - - - | Возвращает ссылку на первый элемент в списке |
IndexOf | Item : Pointer | Возвращает индекс данного элемента (если Item не найден, то возвращает nil) |
Insert | Index : Integer; Item : Pointer | Вставляет элемент в определённую позицию в списке, "раздвигая" массив |
Last | - - - | Возвращает ссылку на последний элемент в списке |
Move | CurIndex , NewIndex : Integer | Перемещает элемент из CurIndex в NewIndex |
Pack | - - - | Удаляет все указатели на nil из списка |
Remove | Item : Pointer | Удаляет первый совпавший элемент из списка. Возвращает номер удалённого элемента |
Sort | Compare : TListSortCompare | Сортирует список. Критерий сортировки определяет функция Compare |
Остальные методы наледуются от TObject. Они подробно описаны в справочной системе Delphi.
Следует учесть, что свойство Соunt определяет количество помещенных в список элементов, в то время как Сарасitу - текущую ёмкость списка. Если при добавлении очередного элемента обнаруживается, что емкость списка исчерпана, происходит наращивание ёмкости на фиксированную величину (для Соunt < 5 - на 4 элемента, для Соunt < 8 - на 8, для Соunt > 7 - на 16). При этом сначала резервируется память для размещения расширенного массива указателей, затем в нее копируется содержимое старого массива, после чего старый массив указателей уничтожается (занимаемая им память возвращается Windows). Если вы заранее знаете, сколько элементов необходимо поместить в список, установите в начале работы нужное значение в свойство Сарасitу - это снизит непроизводительные затраты времени на расширение списка.
Тип pPointerList объявлен как:
type
pPointerList = ^TPointerList;
TPointerList = array [0..MaxListSize] of Pointer;
procedure
ListExample;
var
List: TList;
Item: Pointer;
Value: Real;
begin
List := TList.Create; {создать список}
Item := New(Value); {занести в кучу данные}
List.Add(Item); {добавить в список ссылку на элемент}
{какие-нибудь другие интсрукции}
List.Remove(Item); {удалить элемент из списка}
Dispose(Item); {удалить элемент из кучи}
{какие-нибудь другие интсрукции}
List.Free; {ликвидировать сам список}
end;