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;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls; type
  TForm1 = 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; var
  Form1: TForm1; implementation {$R *.dfm} uses Generics.Collections; {Delphi 2009 新增的泛型容器单元} var
  List: TList<string>;  {定义一个泛型 TList 类, 这指定了要用于 string}
  str: string = 'Test'; {建立}
procedure TForm1.FormCreate(Sender: TObject);
begin
  List := 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);
begin
  List.Free;
end; procedure TForm1.Edit1Change(Sender: TObject);
begin
  if Edit1.Text <> '' then str := Edit1.Text;
end; {显示}
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  Memo1.Clear;
  for i := to List.Count - do
    Memo1.Lines.Add(List[i]);  {List[i] = List.Item[i]}
  Text := Format('当前总数: %d', [List.Count]);
end; {添加}
procedure TForm1.Button2Click(Sender: TObject);
begin
  List.Add(str);
  Button1.Click; {刷新显示}
end; {插入, 譬如插入在最前面}
procedure TForm1.Button3Click(Sender: TObject);
begin
  List.Insert(, str);
  Button1.Click;
end; {根据序号删除, 譬如删除第一个数据}
procedure TForm1.Button4Click(Sender: TObject);
begin
  List.RemoveAt();
  Button1.Click;
end; {根据内容删除, 譬如删除第一个数据}
procedure TForm1.Button5Click(Sender: TObject);
var
  s: string;
begin
  s := List[];
  List.Remove(s);
  Button1.Click;
end; {查找}
procedure TForm1.Button6Click(Sender: TObject);
var
  n: Integer;
begin
  n := List.IndexOf(str); {LastIndexOf 是从后面找; 也可用 List.Contains(str) 判断是否包含 str}
  if n = - then
    ShowMessage('没找到')
  else
    ShowMessageFmt('%s 是第 %d 个', [str, n+]);
end; {排序}
procedure TForm1.Button7Click(Sender: TObject);
begin
  List.Sort;
  Button1.Click;
end; {翻转}
procedure TForm1.Button8Click(Sender: TObject);
begin
  List.Reverse;
  Button1.Click;
end; {清空}
procedure TForm1.Button9Click(Sender: TObject);
begin
  List.Clear;
  Button1.Click;
end; {添加数组}
procedure TForm1.Button10Click(Sender: TObject);
const
  arr: array[..] of string = ('CodeGear', 'Delphi', '2009');
begin
  List.Add('Embarcadero');
  List.AddRange(arr);
  Button1.Click;
end; end.

窗体文件:


object Form1: TForm1
  Left =
  Top =
  Caption = 'Form1'
  ClientHeight =
  ClientWidth =
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  PixelsPerInch =
  TextHeight =
  object Memo1: TMemo
    Left =
    Top =
    Width =
    Height =
    Align = alLeft
    Lines.Strings = (
      'Memo1')
    ScrollBars = ssBoth
    TabOrder =
    ExplicitHeight =
  end
  object Button1: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button1'
    TabOrder =
    OnClick = Button1Click
  end
  object Button2: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button2'
    TabOrder =
    OnClick = Button2Click
  end
  object Button3: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button3'
    TabOrder =
    OnClick = Button3Click
  end
  object Button4: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button4'
    TabOrder =
    OnClick = Button4Click
  end
  object Button5: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button5'
    TabOrder =
    OnClick = Button5Click
  end
  object Button6: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button6'
    TabOrder =
    OnClick = Button6Click
  end
  object Button7: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button7'
    TabOrder =
    OnClick = Button7Click
  end
  object Button8: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button8'
    TabOrder =
    OnClick = Button8Click
  end
  object Button9: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button9'
    TabOrder =
    OnClick = Button9Click
  end
  object Edit1: TEdit
    Left =
    Top =
    Width =
    Height =
    TabOrder =
    Text = 'Edit1'
    OnChange = Edit1Change
  end
  object Button10: TButton
    Left =
    Top =
    Width =
    Height =
    Caption = 'Button10'
    TabOrder =
    OnClick = Button10Click
  end
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. Get与Post数据长度的限制

    这个问题在我的开发中也遇到,所以在此贴出来(也是在网上搜出来的,呵呵)这是原贴地址http://blog.csdn.net/somat/archive/2004/10/29/158707.aspx两个 ...

  2. IOS-委托代理(degegate)

    委托代理: 委托代理(degegate)顾名思义,把某个对象要做的事情委托给别的对象去做.那么别的对象就是这个对象的代理,代替它来打理要做的事.反映到程序中, 首先要明确一个对象的委托方是哪个对象,委 ...

  3. Redis 数据持久化(一)

    Redis的模块化开发设计的还是相当不错的,在Bio.h和Bio.c文件中定义了一个多线程的文件任务处理模块,在添加和处理任务的时候使用互斥锁和条件变量进行的同步,而且本身也支持多线程,这个模块的支持 ...

  4. GTID复制之二

    在线启用GTID,这样就不会对生产造成影响. 1.在每个Server上,执行 SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY=WARN;确保在ErrorLog中没有WARN ...

  5. Android下拉刷新效果实现

    本文主要包括以下内容 自定义实现pulltorefreshView 使用google官方SwipeRefreshLayout 下拉刷新大致原理 判断当前是否在最上面而且是向下滑的,如果是的话,则加载数 ...

  6. Spring+Hibernate+Oracle中的Clob操作配置

    bean对象配置: <!-- 此处用于指定当前JDBC的实现,详见下面注解① --> <bean id="nativeJdbcExtractor" class=& ...

  7. IBM Rational AppScan 无法记录登录序列 分类: 数据安全 2015-03-18 16:46 158人阅读 评论(0) 收藏

    为了测试漏洞,我在本地部署了一个站点,为http://localhost/app,并且有登录页面. 但是尝试多次,都无法记录登录页面.此时尝试了在hosts文件中,自定义了一个域名 127.0.0.1 ...

  8. hdu 4277 2012长春赛区网络赛 dfs+hashmap ***

    hashmap判重大法好 #include<cstdio> #include<iostream> #include<algorithm> #include<c ...

  9. Visual Studio 2015将在7月20号RTM

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:用了3个多月的VS 2015终于要迎来RTM了,不过感觉有点淡淡的忧伤(为什么呢?请看 ...

  10. 国内大学毕业论文 LaTeX 模板集合

    西北工业大学学位论文LaTeX模板 http://code.google.com/p/nwputhesis/ 西北工业大学硕博士论文LaTeX模版 http://code.google.com/p/n ...