队列Queue:一个被遗失的java.util类
第二种方法
为了克服上面提及到的性能问题,这个方法中,队列Queue类的实现建立在链接表Linkedlist类的基础上,因为链接表Linkedlist对于第一个元素的删除不会导致其它剩余元素位置的移动。
public class Queue2 extends LinkedList
{
public Object enqueue (Object element)
{
add (element);
return element;
}
public Object dequeue ()
{
if (size()== 0)
throw new EmptyQueueException() ;
return removeFirst();
}
}
然而,就是我们在方法中应用的继承关系导致了一个问题。使得Queue2 class 的使用者可以调用一些像addFirst、getLast 等等这些继承来的函数方法,导致一些无法预期的错误。
第三种方法
在这个方法中对象组合方式将代替继承方式。一般来讲,对象组合方式优于继承方式,它提供了较小而且比较集中的类和较小规模的继承层次,很多的设计者过分使用继承,导致了庞大的继承层次关系,以至于变得很难维护和处理。一个基于对象组合的设计会有相对较少的类文件,但同时会产生较多的对象了。
public class Queue
{
private LinkedList items;
public Object enqueue (Object element)
{
items.add (element);
return element;
}
public Object dequeue ()
{
if (items.size()== 0)
throw new EmptyQueueException() ;
return items.removeFirst();
}
}
这种实现方式实现了一个更加强大,更加集中的队列Quene 类,但开发者需要明确地对所有需要的接口进行编码处理(像size,empty,indexOf等方法)。这种方法完整的代码可以下载获得:
Translated by windowsDNA 2004/01/08