用J2SE 5.0创建定制的泛型集合

www.amjs000.com

2018-10-14

非官媒广告  引入了许多新型的集合API-你需要了解它们以便能够正确地实现泛型定制的集合-它可以无缝地与多种类型和新型的"foreach"结构一起工作。

本文将向你展示示怎样创建与J2SE最新特征相兼容的集合。

    一、创建支持泛型的类    !--framecontents--!--/framecontents--  首先,你必须学习如何创建一个答应存在"泛型类型"的类。 这意味着无论何时实例化你的类,你都能够指定一个或多个Java类型与该类相关联。

为了说明这个问题,请考虑列表1中的一个简单示例类。     注重,列表1中的类是如何声明的。 它在尖括号之间指定三个泛型。

这些泛型是真实类型的占位符。

当你声明一个这种类型的类时,你可以指定一个类来代替ONE,TWO和THREE。 假如你不这样做,那么该类将使用Object的默认类型。

    这个类显示出怎样设计一个类来接收三个泛型类型。

当你创建一个这种类型的类时你要支持准确的类型。     列表1.泛型类:    ;  publicclassExampleONE,TWO,THREE{   privateONEone;   privateTWOtwo;   privateTHREEthree;   publicONEgetOne(){returnone;}   publicvoidsetOne(ONEone){=one;}   publicTHREEgetThree(){returnthree;}   publicvoidsetThree(THREEthree){=three;}   publicTWOgetTwo(){returntwo;}   publicvoidsetTwo(TWOtwo){=two;}   publicstaticvoidmain(Stringargs[]){  ExampleDouble,Integer,Stringexample=new  ExampleDouble,Integer,String  ();  (2);  ("Three");   }  }  下面是如何实例化一个Example类型的类的情形:    Exampleexample=newExample();  前面的代码将代替具体的Double,Integer和String类型-相当于在列表1中的"ONE"、"TWO"和"THREE"占位符。 你可以看到这些变量都有这些类型,通过下面三行设置它们的值。

    ();  (2);  ("Three");  现在,既然你已经知道如何创建一个使用泛型的定制类,那么创建一个使用泛型的定制集合类则更为简单些。     二、创建一个Queue类    一个队列是一个很有用的数据结构。 为了理解一个队列的功能,你可以想像在一个娱乐公园人们排队骑马的情形。 人们从队的后面进入到队中。 为此,他们等待而最后到达队伍的前端。 其顺序不能改变。

    这种情形可以被应用到一个队列类上去。

它共有两个方法,分别是"push"和"pop"。 你使用push方法来把对象放置到队列中,而使用pop方法从队列中删除一项。 例如,假如你使用push方法把三个对象添加到队列上,那么连续调用pop三次将以同样顺序从队列中删除这三个元素。 这正与娱乐公园的情形相一致。

假如有三个人以一特定的顺序进入队中,他们将以相同的顺序得到骑马娱乐。

    下列代码显示出怎么实现一个使用泛型的Java队列。

    ;  *;  publicclassQueue{  privateArrayListlist=newArrayList();  publicvoidpush(Tobj){(obj);}  publicTpop()throwsQueueException{  if(size()==0)  thrownewQueueException(  "Triedtopopsomethingfromthequeue,"+  "whenitwasempty");  Tresult=(0);  (0);  returnresult;  }  publicbooleanisEmpty(){();}  publicintsize(){();}  publicvoidclear(){();}  }  前面的代码声明了队列类,这样它可以接收一个泛型类型。

     。