Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16493482
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:45:49

下载本文示例代码
  J2SE 5.0引入了许多新型的集合API-你需要了解它们以便能够正确地实现泛型定制的集合-它可以无缝地与多种类型和新型的"for each"结构一起工作。本文将向你展示示怎样创建与J2SE最新特征相兼容的集合。  一、 创建支持泛型的类  首先,你必须学习如何创建一个允许存在"泛型类型"的类。这意味着无论何时实例化你的类,你都能够指定一个或多个Java类型与该类相关联。为了说明这个问题,请考虑列表1中的一个简单示例类。  注意,列表1中的类是如何声明的。它在尖括号之间指定三个泛型。这些泛型是真实类型的占位符。当你声明一个这种类型的类时,你可以指定一个类来代替ONE,TWO和THREE。如果你不这样做,那么该类将使用Object的默认类型。  这个类显示出怎样设计一个类来接收三个泛型类型。当你创建一个这种类型的类时你要支持准确的类型。  列表1.泛型类: package com.heatonresearch.examples.collections;public class Example { private ONE one; private TWO two; private THREE three; public ONE getOne() { return one; } public void setOne(ONE one) { this.one = one; } public THREE getThree() { return three; } public void setThree(THREE three) { this.three = three; } public TWO getTwo() { return two; } public void setTwo(TWO two) { this.two = two; } public static void main(String args[]) {  Example example = new   Example();  example.setOne(1.5);  example.setTwo(2);  example.setThree("Three"); }}  下面是如何实例化一个Example类型的类的情形: Example example=new Example();  前面的代码将代替具体的Double,Integer和String类型-相当于在列表1中的"ONE"、"TWO"和"THREE"占位符。你可以看到这些变量都有这些类型,通过下面三行设置它们的值。 example.setOne(1.5);example.setTwo(2);example.setThree("Three");  现在,既然你已经知道如何创建一个使用泛型的定制类,那么创建一个使用泛型的定制集合类则更为简单些。  二、 创建一个Queue类  一个队列是一个很有用的数据结构。为了理解一个队列的功能,你可以想像在一个娱乐公园人们排队骑马的情形。人们从队的后面进入到队中。为此,他们等待而最后到达队伍的前端。其顺序不能改变。  这种情形可以被应用到一个队列类上去。它共有两个方法,分别是"push"和"pop"。你使用push方法来把对象放置到队列中,而使用pop方法从队列中删除一项。例如,如果你使用push方法把三个对象添加到队列上,那么连续调用pop三次将以同样顺序从队列中删除这三个元素。这正与娱乐公园的情形相一致。如果有三个人以一特定的顺序进入队中,他们将以相同的顺序得到骑马娱乐。  下列代码显示出怎么实现一个使用泛型的Java队列。 package com.heatonresearch.examples.collections;import java.util.*;public class Queue {private ArrayList list = new ArrayList();public void push(T obj) { list.add(obj); }public T pop() throws QueueException {if (size() == 0)throw new QueueException("Tried to pop something from the queue, " "when it was empty");T result = list.get(0);list.remove(0);return result;}public boolean isEmpty() { return list.isEmpty(); }public int size() { return list.size(); }public void clear() { list.clear(); }}  前面的代码声明了队列类,这样它可以接收一个泛型类型。 public class Queue  泛型类型"T"是该类类型-它将被放入到该队列中去。为了把这些项存储到一个队列中,该类还要创建一个接收"T"类型的ArrayList。push方法很简单的。它接收单一的类型为泛型"T"的对象,并且把它添加到ArrayList上。  pop方法稍微复杂些。首先,如果你要从队列中弹出一个对象,并且如果在队列中没有对象,那么该类将抛出一个QueueException类型的异常。下面是QueueException类。 package com.heatonresearch.examples.collections;public class QueueException extends Exception { public QueueException(String msg) {  super(msg); }}  下面是抛出QueueException类型异常的代码: if (size() == 0)throw new QueueException("Tried to pop something from the queue, " "when it was empty");  如果队列不空,该方法将从队列中检索最后一个元素,在一个名叫result的变量中存储它,然后从该列表中删除这个项。下面几行代码实现了这一功能: T result = list.get(0);list.remove(0);return result;  注意,该临时变量也是泛型类型"T"。当这个类与真实的代表泛型类型的Java类型一起使用时,为了实现最大程度上的兼容性,无论你何时存取这些变量,确保总是使用泛型类型是非常重要的。共2页。 1 2 :   J2SE 5.0引入了许多新型的集合API-你需要了解它们以便能够正确地实现泛型定制的集合-它可以无缝地与多种类型和新型的"for each"结构一起工作。本文将向你展示示怎样创建与J2SE最新特征相兼容的集合。  一、 创建支持泛型的类  首先,你必须学习如何创建一个允许存在"泛型类型"的类。这意味着无论何时实例化你的类,你都能够指定一个或多个Java类型与该类相关联。为了说明这个问题,请考虑列表1中的一个简单示例类。  注意,列表1中的类是如何声明的。它在尖括号之间指定三个泛型。这些泛型是真实类型的占位符。当你声明一个这种类型的类时,你可以指定一个类来代替ONE,TWO和THREE。如果你不这样做,那么该类将使用Object的默认类型。  这个类显示出怎样设计一个类来接收三个泛型类型。当你创建一个这种类型的类时你要支持准确的类型。  列表1.泛型类: package com.heatonresearch.examples.collections;public class Example { private ONE one; private TWO two; private THREE three; public ONE getOne() { return one; } public void setOne(ONE one) { this.one = one; } public THREE getThree() { return three; } public void setThree(THREE three) { this.three = three; } public TWO getTwo() { return two; } public void setTwo(TWO two) { this.two = two; } public static void main(String args[]) {  Example example = new   Example();  example.setOne(1.5);  example.setTwo(2);  example.setThree("Three"); }}  下面是如何实例化一个Example类型的类的情形: Example example=new Example();  前面的代码将代替具体的Double,Integer和String类型-相当于在列表1中的"ONE"、"TWO"和"THREE"占位符。你可以看到这些变量都有这些类型,通过下面三行设置它们的值。 example.setOne(1.5);example.setTwo(2);example.setThree("Three");  现在,既然你已经知道如何创建一个使用泛型的定制类,那么创建一个使用泛型的定制集合类则更为简单些。  二、 创建一个Queue类  一个队列是一个很有用的数据结构。为了理解一个队列的功能,你可以想像在一个娱乐公园人们排队骑马的情形。人们从队的后面进入到队中。为此,他们等待而最后到达队伍的前端。其顺序不能改变。  这种情形可以被应用到一个队列类上去。它共有两个方法,分别是"push"和"pop"。你使用push方法来把对象放置到队列中,而使用pop方法从队列中删除一项。例如,如果你使用push方法把三个对象添加到队列上,那么连续调用pop三次将以同样顺序从队列中删除这三个元素。这正与娱乐公园的情形相一致。如果有三个人以一特定的顺序进入队中,他们将以相同的顺序得到骑马娱乐。  下列代码显示出怎么实现一个使用泛型的Java队列。 package com.heatonresearch.examples.collections;import java.util.*;public class Queue {private ArrayList list = new ArrayList();public void push(T obj) { list.add(obj); }public T pop() throws QueueException {if (size() == 0)throw new QueueException("Tried to pop something from the queue, " "when it was empty");T result = list.get(0);list.remove(0);return result;}public boolean isEmpty() { return list.isEmpty(); }public int size() { return list.size(); }public void clear() { list.clear(); }}  前面的代码声明了队列类,这样它可以接收一个泛型类型。 public class Queue  泛型类型"T"是该类类型-它将被放入到该队列中去。为了把这些项存储到一个队列中,该类还要创建一个接收"T"类型的ArrayList。push方法很简单的。它接收单一的类型为泛型"T"的对象,并且把它添加到ArrayList上。  pop方法稍微复杂些。首先,如果你要从队列中弹出一个对象,并且如果在队列中没有对象,那么该类将抛出一个QueueException类型的异常。下面是QueueException类。 package com.heatonresearch.examples.collections;public class QueueException extends Exception { public QueueException(String msg) {  super(msg); }}  下面是抛出QueueException类型异常的代码: if (size() == 0)throw new QueueException("Tried to pop something from the queue, " "when it was empty");  如果队列不空,该方法将从队列中检索最后一个元素,在一个名叫result的变量中存储它,然后从该列表中删除这个项。下面几行代码实现了这一功能: T result = list.get(0);list.remove(0);return result;  注意,该临时变量也是泛型类型"T"。当这个类与真实的代表泛型类型的Java类型一起使用时,为了实现最大程度上的兼容性,无论你何时存取这些变量,确保总是使用泛型类型是非常重要的。共2页。 1 2 : 下载本文示例代码


用J2SE 5.0创建定制的泛型集合用J2SE 5.0创建定制的泛型集合用J2SE 5.0创建定制的泛型集合用J2SE 5.0创建定制的泛型集合用J2SE 5.0创建定制的泛型集合用J2SE 5.0创建定制的泛型集合用J2SE 5.0创建定制的泛型集合用J2SE 5.0创建定制的泛型集合用J2SE 5.0创建定制的泛型集合用J2SE 5.0创建定制的泛型集合用J2SE 5.0创建定制的泛型集合用J2SE 5.0创建定制的泛型集合用J2SE 5.0创建定制的泛型集合用J2SE 5.0创建定制的泛型集合用J2SE 5.0创建定制的泛型集合
阅读(200) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~