佇列Queue:一個被遺失的java.util類(完)
佇列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