Delphi 2009 新增了泛型容器单元: Generics.Collections, 同时还有一个 Generics.Defaults 单元做支持.

Generics.Collections 包含了以下实用类:
TList<T>
TQueue<T>
TStack<T>
TDictionary<TKey,TValue>
TObjectList<T>
TObjectQueue<T>
TObjectStack<T>
TObjectDictionary<TKey,TValue>


有了以上泛型的容器, 恐怕 Classes.TList 和 Contnrs 单元下的 TObjectList 等系列容器也就只为兼容存在了.

Generics.Collections.TList<T> 既然是泛型的, 那肯定应该容得下字符串列表, 本例就依此测试吧.

如果你对泛型不了解, 应先看看: http://www.cnblogs.com/del/archive/2008/08/14/1268258.html


本例效果图:


代码文件:


  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Memo1: TMemo;
  12.     Edit1: TEdit;
  13.     Button1: TButton;
  14.     Button2: TButton;
  15.     Button3: TButton;
  16.     Button4: TButton;
  17.     Button5: TButton;
  18.     Button6: TButton;
  19.     Button7: TButton;
  20.     Button8: TButton;
  21.     Button9: TButton;
  22.     Button10: TButton;
  23.     procedure FormCreate(Sender: TObject);
  24.     procedure FormDestroy(Sender: TObject);
  25.     procedure Edit1Change(Sender: TObject);
  26.     procedure Button1Click(Sender: TObject);
  27.     procedure Button2Click(Sender: TObject);
  28.     procedure Button3Click(Sender: TObject);
  29.     procedure Button4Click(Sender: TObject);
  30.     procedure Button5Click(Sender: TObject);
  31.     procedure Button6Click(Sender: TObject);
  32.     procedure Button7Click(Sender: TObject);
  33.     procedure Button8Click(Sender: TObject);
  34.     procedure Button9Click(Sender: TObject);
  35.     procedure Button10Click(Sender: TObject);
  36.   end;
  37.  
  38. var
  39.   Form1: TForm1;
  40.  
  41. implementation
  42.  
  43. {$R *.dfm}
  44.  
  45. uses Generics.Collections; {Delphi 2009 新增的泛型容器单元}
  46.  
  47. var
  48.   List: TList<string>;  {定义一个泛型 TList 类, 这指定了要用于 string}
  49.   str: string = 'Test';
  50.  
  51. {建立}
  52. procedure TForm1.FormCreate(Sender: TObject);
  53. begin
  54.   List := TList<string>.Create;
  55.  
  56.   Memo1.Clear;
  57.   Edit1.Text := str;
  58.   Button1.Caption := Button1.Caption + ' 显示';
  59.   Button2.Caption := Button2.Caption + ' 添加';
  60.   Button3.Caption := Button3.Caption + ' 插入';
  61.   Button4.Caption := Button4.Caption + ' 删除1';
  62.   Button5.Caption := Button5.Caption + ' 删除2';
  63.   Button6.Caption := Button6.Caption + ' 查找';
  64.   Button7.Caption := Button7.Caption + ' 排序';
  65.   Button8.Caption := Button8.Caption + ' 翻转';
  66.   Button9.Caption := Button9.Caption + ' 清空';
  67.   Button10.Caption := Button10.Caption + ' 添加数组';
  68. end;
  69.  
  70. {释放}
  71. procedure TForm1.FormDestroy(Sender: TObject);
  72. begin
  73.   List.Free;
  74. end;
  75.  
  76. procedure TForm1.Edit1Change(Sender: TObject);
  77. begin
  78.   if Edit1.Text <> '' then str := Edit1.Text;
  79. end;
  80.  
  81. {显示}
  82. procedure TForm1.Button1Click(Sender: TObject);
  83. var
  84.   i: Integer;
  85. begin
  86.   Memo1.Clear;
  87.   for i := to List.Count - do
  88.     Memo1.Lines.Add(List[i]);  {List[i] = List.Item[i]}
  89.   Text := Format('当前总数: %d', [List.Count]);
  90. end;
  91.  
  92. {添加}
  93. procedure TForm1.Button2Click(Sender: TObject);
  94. begin
  95.   List.Add(str);
  96.   Button1.Click; {刷新显示}
  97. end;
  98.  
  99. {插入, 譬如插入在最前面}
  100. procedure TForm1.Button3Click(Sender: TObject);
  101. begin
  102.   List.Insert(, str);
  103.   Button1.Click;
  104. end;
  105.  
  106. {根据序号删除, 譬如删除第一个数据}
  107. procedure TForm1.Button4Click(Sender: TObject);
  108. begin
  109.   List.RemoveAt();
  110.   Button1.Click;
  111. end;
  112.  
  113. {根据内容删除, 譬如删除第一个数据}
  114. procedure TForm1.Button5Click(Sender: TObject);
  115. var
  116.   s: string;
  117. begin
  118.   s := List[];
  119.   List.Remove(s);
  120.   Button1.Click;
  121. end;
  122.  
  123. {查找}
  124. procedure TForm1.Button6Click(Sender: TObject);
  125. var
  126.   n: Integer;
  127. begin
  128.   n := List.IndexOf(str); {LastIndexOf 是从后面找; 也可用 List.Contains(str) 判断是否包含 str}
  129.   if n = - then
  130.     ShowMessage('没找到')
  131.   else
  132.     ShowMessageFmt('%s 是第 %d 个', [str, n+]);
  133. end;
  134.  
  135. {排序}
  136. procedure TForm1.Button7Click(Sender: TObject);
  137. begin
  138.   List.Sort;
  139.   Button1.Click;
  140. end;
  141.  
  142. {翻转}
  143. procedure TForm1.Button8Click(Sender: TObject);
  144. begin
  145.   List.Reverse;
  146.   Button1.Click;
  147. end;
  148.  
  149. {清空}
  150. procedure TForm1.Button9Click(Sender: TObject);
  151. begin
  152.   List.Clear;
  153.   Button1.Click;
  154. end;
  155.  
  156. {添加数组}
  157. procedure TForm1.Button10Click(Sender: TObject);
  158. const
  159.   arr: array[..] of string = ('CodeGear', 'Delphi', '2009');
  160. begin
  161.   List.Add('Embarcadero');
  162.   List.AddRange(arr);
  163.   Button1.Click;
  164. end;
  165.  
  166. end.

窗体文件:


  1. object Form1: TForm1
  2.   Left =
  3.   Top =
  4.   Caption = 'Form1'
  5.   ClientHeight =
  6.   ClientWidth =
  7.   Color = clBtnFace
  8.   Font.Charset = DEFAULT_CHARSET
  9.   Font.Color = clWindowText
  10.   Font.Height = -
  11.   Font.Name = 'Tahoma'
  12.   Font.Style = []
  13.   OldCreateOrder = False
  14.   OnCreate = FormCreate
  15.   OnDestroy = FormDestroy
  16.   PixelsPerInch =
  17.   TextHeight =
  18.   object Memo1: TMemo
  19.     Left =
  20.     Top =
  21.     Width =
  22.     Height =
  23.     Align = alLeft
  24.     Lines.Strings = (
  25.       'Memo1')
  26.     ScrollBars = ssBoth
  27.     TabOrder =
  28.     ExplicitHeight =
  29.   end
  30.   object Button1: TButton
  31.     Left =
  32.     Top =
  33.     Width =
  34.     Height =
  35.     Caption = 'Button1'
  36.     TabOrder =
  37.     OnClick = Button1Click
  38.   end
  39.   object Button2: TButton
  40.     Left =
  41.     Top =
  42.     Width =
  43.     Height =
  44.     Caption = 'Button2'
  45.     TabOrder =
  46.     OnClick = Button2Click
  47.   end
  48.   object Button3: TButton
  49.     Left =
  50.     Top =
  51.     Width =
  52.     Height =
  53.     Caption = 'Button3'
  54.     TabOrder =
  55.     OnClick = Button3Click
  56.   end
  57.   object Button4: TButton
  58.     Left =
  59.     Top =
  60.     Width =
  61.     Height =
  62.     Caption = 'Button4'
  63.     TabOrder =
  64.     OnClick = Button4Click
  65.   end
  66.   object Button5: TButton
  67.     Left =
  68.     Top =
  69.     Width =
  70.     Height =
  71.     Caption = 'Button5'
  72.     TabOrder =
  73.     OnClick = Button5Click
  74.   end
  75.   object Button6: TButton
  76.     Left =
  77.     Top =
  78.     Width =
  79.     Height =
  80.     Caption = 'Button6'
  81.     TabOrder =
  82.     OnClick = Button6Click
  83.   end
  84.   object Button7: TButton
  85.     Left =
  86.     Top =
  87.     Width =
  88.     Height =
  89.     Caption = 'Button7'
  90.     TabOrder =
  91.     OnClick = Button7Click
  92.   end
  93.   object Button8: TButton
  94.     Left =
  95.     Top =
  96.     Width =
  97.     Height =
  98.     Caption = 'Button8'
  99.     TabOrder =
  100.     OnClick = Button8Click
  101.   end
  102.   object Button9: TButton
  103.     Left =
  104.     Top =
  105.     Width =
  106.     Height =
  107.     Caption = 'Button9'
  108.     TabOrder =
  109.     OnClick = Button9Click
  110.   end
  111.   object Edit1: TEdit
  112.     Left =
  113.     Top =
  114.     Width =
  115.     Height =
  116.     TabOrder =
  117.     Text = 'Edit1'
  118.     OnChange = Edit1Change
  119.   end
  120.   object Button10: TButton
  121.     Left =
  122.     Top =
  123.     Width =
  124.     Height =
  125.     Caption = 'Button10'
  126.     TabOrder =
  127.     OnClick = Button10Click
  128.   end
  129. end

Delphi 2009 泛型容器单元(Generics.Collections)[1]: TList<T>的更多相关文章

  1. 泛型容器单元(Generics.Collections)[3]: TStack<T> 堆栈列表

    TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出. TStack 主要有三个方法.一个属性:Push(压栈).Pop(出栈).Peek(查看下一个 ...

  2. 泛型容器单元(Generics.Collections)[2]: TQueue<T> 队列列表

    TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出. TQueue 主要有三个方法.一个属性:Enqueue(入列).Dequeue(出列).Pee ...

  3. 谈一谈从 Delphi 2009 之后就支援的重要功能 – 泛型 (Generic)

    前言 在C++的语言基础当中,除了物件导向.事件驱动的概念之外,模版设计(Template)也是非常重要的一环.然而,C++的开发人员能够善用模版设计的并不多.模版设计这个好物,一般还有一个名称,就是 ...

  4. Delphi 7以来的Delphi 2009测试版新语法特性

    我晕,Delphi 7 以后增加了这么多有用的语法,我都不知道.真是越学越觉得自己浅薄,自己所作的Delphi项目所用的知识还不够Delphi知识储备体系的十分之一,更别说Delphi还在继续发展. ...

  5. C#中泛型容器Stack<T>

    我以前都是学出c,c++,这个学期开始学c#有点不适应,在编程中遇到些问题,所以自己在网上查了些资料,翻了一下书,写一些总结. 关于c#中Stack<T>泛型容器: <1>st ...

  6. Delphi 对泛型TList的的改进(TSimpleList)

    TList 有一个比较麻烦的问题是,到底由谁来释放List中的对象或指针. 本例将释放任务教给 TSimpleList ,方便使用. 如果 TList 为于管理对象,还可以实现 AddNewOne 功 ...

  7. 从头认识java-13.11 对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题?

    这一章节我们继续类型擦除的话题,我们将通过对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题? 1.数组 package com.ray.ch13; public class Test { pub ...

  8. delphi 需要应用一个单元是,需要在工程里面先添加单元

    delphi 需要应用一个单元是,需要在工程里面先添加单元

  9. delphi基础篇之单元文件

    Delphi单元文件 unit MainFrm; {库单元文件头} interface        {接口部分由Interface开始implementation结束.声明引用的单元,常量,数据类型 ...

随机推荐

  1. 【CCL】连通区域提取

    根据朋友给的一份原理写的 感觉还挺清楚 #include "cv.h" #include "highgui.h" #include <stdio.h> ...

  2. 【python升级录】--列表,元组

    本节内容 字符串格式化输出 数据运算 for循环 while循环 列表 元组 [字符串格式化输出] 占位符 %s—string,%d—digital,%f —float # __author:&quo ...

  3. .Net的DataGrid的使用

    先上图吧

  4. asp.net Excel数据导入到数据库中

    protected void Btn_Import_Click(object sender, EventArgs e) { bool Result_Import = false; bool Resul ...

  5. 一个.xib界面文件中设计有多个View

    一个新建的.xib文件(Xcode's Interface Builder),有一个默认的View,也就是self.view,是主视图 其他新建的View可以在viewDidLoad()函数中使用 [ ...

  6. July 5th, Week 28th Tuesday, 2016

    If you smile when no one else is around, you really mean it. 独处的时候你的笑容才是发自内心的笑容. Human beings are so ...

  7. linux初体验

    linux系统和window一样,也是一套独立的操作系统,它只是没有图形化界面而已

  8. 模拟赛1031d1

    NP(np)Time Limit:1000ms Memory Limit:64MB题目描述LYK 喜欢研究一些比较困难的问题,比如 np 问题.这次它又遇到一个棘手的 np 问题.问题是这个样子的:有 ...

  9. zipArchive

    ZipArchive *unZip = [[ZipArchive alloc]init]; if ([unZip unzipOpenFile:savePath]) { BOOL ret = [unZi ...

  10. android viewPager 切换页面时防止fragment重新加载

    把限制页面数设置成应用一共的页面数就可以了 ViewPager.setOffscreenPageLimit(3);