2010-05-20 38 views
3

在我的C學習日,當我實現了一個Queue,我實現了他們在LinkedList的頂部。所以基本上我有兩個指針(正面和背面)上的LinkedList頂部Queue操作,或更好的在CircularLinkedList的頂部一個前指針。爲什麼AbstractQueue和AbstractList脫節?

我學習了Java Collections Framework,我觀察到的設計已經完全脫節的ListQueue接口和實現分支出以下方式 -

alt text

我覺得AbstractQueue應該已經分類在AbstractList的某個地方。也許不是裏面ArrayList,因爲我不想元素的隨機訪問,但也許裏面AbstractSequentialList,嗯? (我知道,我可以在這裏完全錯誤的)

回答

2

這聽起來象是爲實現靈活性進行:一個隊列沒有被實現爲列表(尤其是優先級隊列幾乎可以肯定是一個堆的下方,這是一個更爲隨機存取結構比列表可以提供)。

2

我想接口應是不相交的,但在執行的方法的鏈接,你已經確定。列表和隊列在被視爲黑匣子時在概念上與消費者不同,即使在使用鏈接列表實現它們的方式之間存在關聯。

1

不將Liskov Substitution Principle發揮作用嗎? AbstractQueue 不是 AbstractList,所以它不應該從它繼承。它的實現可能使用一個,但是,通過組合而不是繼承。