1. 程式人生 > >佇列Queue:一個被遺失的java.util類(完)

佇列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