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



本例效果图:



代码文件:


unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Memo1: TMemo;Edit1: TEdit;Button1: TButton;Button2: TButton;Button3: TButton;Button4: TButton;Button5: TButton;Button6: TButton;Button7: TButton;Button8: TButton;Button9: TButton;Button10: TButton;procedure FormCreate(Sender: TObject);procedure FormDestroy(Sender: TObject);procedure Edit1Change(Sender: TObject);procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Button4Click(Sender: TObject);procedure Button5Click(Sender: TObject);procedure Button6Click(Sender: TObject);procedure Button7Click(Sender: TObject);procedure Button8Click(Sender: TObject);procedure Button9Click(Sender: TObject);procedure Button10Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}uses Generics.Collections; {Delphi 2009 新增的泛型容器单元}varList: TList<string>;  {定义一个泛型 TList 类, 这指定了要用于 string}str: string = 'Test';{建立}
procedure TForm1.FormCreate(Sender: TObject);
beginList := TList<string>.Create;Memo1.Clear;Edit1.Text := str;Button1.Caption := Button1.Caption + ' 显示';Button2.Caption := Button2.Caption + ' 添加';Button3.Caption := Button3.Caption + ' 插入';Button4.Caption := Button4.Caption + ' 删除1';Button5.Caption := Button5.Caption + ' 删除2';Button6.Caption := Button6.Caption + ' 查找';Button7.Caption := Button7.Caption + ' 排序';Button8.Caption := Button8.Caption + ' 翻转';Button9.Caption := Button9.Caption + ' 清空';Button10.Caption := Button10.Caption + ' 添加数组';
end;{释放}
procedure TForm1.FormDestroy(Sender: TObject);
beginList.Free;
end;procedure TForm1.Edit1Change(Sender: TObject);
beginif Edit1.Text <> '' then str := Edit1.Text;
end;{显示}
procedure TForm1.Button1Click(Sender: TObject);
vari: Integer;
beginMemo1.Clear;for i := 0 to List.Count - 1 doMemo1.Lines.Add(List[i]);  {List[i] = List.Item[i]}Text := Format('当前总数: %d', [List.Count]);
end;{添加}
procedure TForm1.Button2Click(Sender: TObject);
beginList.Add(str);Button1.Click; {刷新显示}
end;{插入, 譬如插入在最前面}
procedure TForm1.Button3Click(Sender: TObject);
beginList.Insert(0, str);Button1.Click;
end;{根据序号删除, 譬如删除第一个数据}
procedure TForm1.Button4Click(Sender: TObject);
beginList.RemoveAt(0);Button1.Click;
end;{根据内容删除, 譬如删除第一个数据}
procedure TForm1.Button5Click(Sender: TObject);
vars: string;
begins := List[0];List.Remove(s);Button1.Click;
end;{查找}
procedure TForm1.Button6Click(Sender: TObject);
varn: Integer;
beginn := List.IndexOf(str); {LastIndexOf 是从后面找; 也可用 List.Contains(str) 判断是否包含 str}if n = -1 thenShowMessage('没找到')elseShowMessageFmt('%s 是第 %d 个', [str, n+1]);
end;{排序}
procedure TForm1.Button7Click(Sender: TObject);
beginList.Sort;Button1.Click;
end;{翻转}
procedure TForm1.Button8Click(Sender: TObject);
beginList.Reverse;Button1.Click;
end;{清空}
procedure TForm1.Button9Click(Sender: TObject);
beginList.Clear;Button1.Click;
end;{添加数组}
procedure TForm1.Button10Click(Sender: TObject);
constarr: array[0..2] of string = ('CodeGear', 'Delphi', '2009');
beginList.Add('Embarcadero');List.AddRange(arr);Button1.Click;
end;end.

窗体文件:


object Form1: TForm1Left = 0Top = 0Caption = 'Form1'ClientHeight = 201ClientWidth = 349Color = clBtnFaceFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11Font.Name = 'Tahoma'Font.Style = []OldCreateOrder = FalseOnCreate = FormCreateOnDestroy = FormDestroyPixelsPerInch = 96TextHeight = 13object Memo1: TMemoLeft = 0Top = 0Width = 121Height = 201Align = alLeftLines.Strings = ('Memo1')ScrollBars = ssBothTabOrder = 0ExplicitHeight = 206endobject Button1: TButtonLeft = 136Top = 13Width = 81Height = 25Caption = 'Button1'TabOrder = 1OnClick = Button1Clickendobject Button2: TButtonLeft = 127Top = 44Width = 100Height = 25Caption = 'Button2'TabOrder = 2OnClick = Button2Clickendobject Button3: TButtonLeft = 127Top = 75Width = 100Height = 25Caption = 'Button3'TabOrder = 3OnClick = Button3Clickendobject Button4: TButtonLeft = 127Top = 106Width = 100Height = 25Caption = 'Button4'TabOrder = 4OnClick = Button4Clickendobject Button5: TButtonLeft = 127Top = 137Width = 100Height = 25Caption = 'Button5'TabOrder = 5OnClick = Button5Clickendobject Button6: TButtonLeft = 240Top = 44Width = 100Height = 25Caption = 'Button6'TabOrder = 6OnClick = Button6Clickendobject Button7: TButtonLeft = 240Top = 75Width = 100Height = 25Caption = 'Button7'TabOrder = 7OnClick = Button7Clickendobject Button8: TButtonLeft = 240Top = 106Width = 100Height = 25Caption = 'Button8'TabOrder = 8OnClick = Button8Clickendobject Button9: TButtonLeft = 240Top = 137Width = 100Height = 25Caption = 'Button9'TabOrder = 9OnClick = Button9Clickendobject Edit1: TEditLeft = 240Top = 15Width = 100Height = 21TabOrder = 10Text = 'Edit1'OnChange = Edit1Changeendobject Button10: TButtonLeft = 127Top = 168Width = 214Height = 25Caption = 'Button10'TabOrder = 11OnClick = Button10Clickend
end

Delphi 2009 泛型容器单元(Generics.Collections)[1]: TListT相关推荐

  1. 四、Delphi 2009 泛型容器单元(Generics.Collections)[3]: TStackT

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

  2. Delphi 2009 的反射单元(ObjAuto):

    ObjAuto 单元应该算是对 TypInfo 单元的功能扩展吧? 它提供了 5 个方法: GetMethods.GetMethodInfo.CreateMethodPointer.ReleaseMe ...

  3. 泛型TListT Generics.Collections单元

    网上关于Generics.Collections单元的TList<T>没有说清楚.不理解的话,在这里看吧. T --泛指各种类型.那么是不是可以在这里声明为--支持的各种类型? 答案:是! ...

  4. 20080826 - Delphi 2009 来了

    Embarcadero 发布了 Delphi 和 C++Builder 的 Windows 开发工具. 官方称 Delphi 2009 是自 Delphi 3 以来最重要的一个版本. 其更新的亮点有: ...

  5. 三十、详测 Generics Collections: TObjectList、TObjectQueue、TObjectStack

    TObjectList<T>.TObjectQueue<T>.TObjectStack<T> 分别继承自: TList<T>.TQueue<T&g ...

  6. Delphi的高光时刻!C#之父Anders Hejlsberg的祝福:持续更新、持续发展的Delphi家族- Delphi 2009及其后的新功能

    当Anders Hejlsberg宣布Delphi于1995年2月14日在旧金山推出时,有一则轶事表明微软的一些员工也出席了.安德斯起立鼓掌.因此,他于次年被邀请担任微软的杰出工程师和技术研究员.然后 ...

  7. 详测 Generics Collections TList (6): Reverse、TrimExcess

    为什么80%的码农都做不了架构师?>>>    unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Clas ...

  8. Delphi 2009 中 TStrings 与 TStream 的增强

    在 Delphi 2009 中, TStrings 类(包括 TStringList 和包含 TStrings 属性的所有组件, 譬如 Memo.lines 属性.ListBox.Items 属性). ...

  9. Delphi 2009 超前预知!

    转自: http://www.faceker.com/ Tiburon 是下一版本 Delphi 的开发代号,之前的命名应该是 Delphi 2008,但最近看 CodeGear 网站相关的 Blog ...

最新文章

  1. Safair 浏览器cllick事件不生效或者需要双击才生效
  2. cglib动态代理jar包_代理模式详解:静态代理+JDK/CGLIB 动态代理实战
  3. 工具 左侧服务列表_协作办公时代,在线编辑文档工具,安排!
  4. String ua = request.getHeader(user-agent)---ua值为null
  5. java通过commons-fileupload实现多张图片的上传(jsp页面)
  6. 由Handle转换为控件
  7. NYOJ4——ASCII码排序
  8. 索尼音乐牵手UNLEASH厂牌 实力新星LiCong李聪 Veegee正式加盟
  9. java开发和安卓开发_Android开发和Java开发有什么区别
  10. HTML5倍数功能视频播放器(加速2倍,1.5倍播放)
  11. Python-实现(整蛊)消息批量发送
  12. 迅雷离线下载分享网站
  13. python面向对象 : 反射和内置方法
  14. 什么是原创?独立完成就是原创吗?
  15. android手机视频编辑,安卓手机如何使用视频编辑器给自己录制的视频去除原声并添加配乐?安卓手机视频编辑器...
  16. U盘出现了0字节怎么找回数据
  17. 开发三年,靠这份Java面试宝典,拿到字节offer
  18. 所有的事情都会趋于平淡
  19. 3dMax 骨骼动画导入到Unity
  20. 17岁高考落榜生成为世界顶尖IT高手

热门文章

  1. iOS UIView成像流程
  2. web前端学习day_03:JavaScript:如何使用/ 语法/ 方法/ NaN/ js对象分类/ BOM浏览器相关/ 事件/ DOM文档对象模型
  3. Xamarin Essentials教程获取路径文件系统FileSystem
  4. 基于NMAP日志文件的暴力破解工具BruteSpray
  5. Android 2D游戏引擎AndEngine配置环境
  6. java什么是成员域成员方法,java多态中的成员绑定
  7. java监控activemq,ActiveMQ与Spring整合-监听消息
  8. java轮盘赌_java人工蜂群算法求解TSP问题
  9. iOS cell 里需要创建n个元素
  10. 未在本地计算机上注册oraoledb.oracle.1提供程序,未在本地计算机上注册“OraOLEDB.Oracle.1”提供程序--问题的处理...