快速业务通道

用J2SE 5.0创建定制的泛型集合 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
urn 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类型一起使用时,为了实现最大程度上的兼容性,无论你何时存取这些变量,确保总是使用泛型类型是非常重要的。

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

时间:2011-03-05

三、测试Queue类

下列类用于测试"泛型"队列。

package com.heatonresearch.examples.collections;   public class TestQueue {    public static void main(String args[]) {     Queue<Integer> queue = new Queue<Integer>();     queue.push(1);     queue.push(2);     queue.push(3);     try {      System.out.println("Pop 1:" + queue.pop());      System.out.println("Pop 2:" + queue.pop());      System.out.println("Pop 3:" + queue.pop());     }     catch (QueueException e) { e.printStackTrace(); }    }   }

前面的代码中创建的队列仅接收整型对象。

Queue<Integer> queue = new Queue<Integer>();

接下来的测试把三个整数添加到该队列上。

queue.push(1); queue.push(2); queue.push(3);

注意,添加到该队列中的这些数字都是原始的类型。因为J2SE的自动装箱特性,这些原始的int类型被自动地转变成Integer对象。

接下来,该测试使用pop方法检索对象。在该队列为空的情况下,该测试捕获到QueueException异常。从队列中弹出三个数字的结果是:

1 2 3

尽管在这里作为一接收的整数队列显示,但是因为泛型,所以队列类对于任何Java对象情况都能正常工作。

四、创建一个可预知的Stack集合

这里是一个更复杂的集合类型-它实现了一个堆栈以使你在实际删除一个对象之前能够预知或"可偷看"。你可以或者通过使用一个迭代算子或使用J2SE 5.0的新的"for each"结构语句来进行预知。

这个PeekableStack类是一个先进后出(FILO)栈-让你遍历当前栈中的内容。它的实现使用了两个类。首先,PeekableStack类实现实际的栈部分。其次,PeekableStackIterator类实现一个"Java标准的"Iterator类-你可以用它来遍历整个栈。列表2(见所附源代码文件)显示出PeekableStack类的具体编码。

注意,列表2中的PeekableStack类实现了Iterable接口。这对于支持新型的J2SE 5.0"

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号