2011-02-06 120 views

回答

5

element()Queue下才有意義只有一個訪問的方法,因爲你可以排隊做的是刪除第一個元素繼承。然而,一個deque支持這個從這兩個結束,需要明確的方法來這樣做。

設計一個API可以讓你訪問第一個元素element()而最後一個元素訪問getLast()並不是很好。

可能玩成這樣另一件事是,Deque在1.6,在Java Collections Framework的古地區的部分地區已過時的新公約,如明確get~/set~方法訪問屬性增加。在這種情況下,getFirst()getLast更貼近當前的Java約定。

+0

實際上,get/set約定並不是真正的新約,它實際上比集合框架更舊(例如,將舊的Vector類與新的List接口進行比較)。 – 2011-02-06 20:21:04

+0

老實說,在這種情況下,element()方法應該已經被淘汰。假設很多人不會讚賞,難道它至少已經被棄用了嗎?或者至少在Javadocs中有一種關於從哪兩種方法中挑選出的方法。 (我相當肯定,這不是Java中重複方法的唯一例子)。 – user183037 2011-02-06 21:16:25

0

在列出的鏈接中,它們看起來像是相同的。但在隊列中,element()似乎是在隊列中的第一個元素處達到峯值的方法,但不會將其從隊列中移除。

3

在Java 1.6中,LinkedList實現了Deque(雙端隊列)。從Deque.element()的javadocs:

獲取,但不移除此 雙端隊列表示的隊列的頭部 (換言之,此雙端隊列的第一 元素)。此方法 僅與它不同,因爲它 會拋出異常,如果此雙端隊列爲空,則爲 。

該方法等效於 getFirst()

在Java 1.5,LinkedList有兩種方法,但getFirst()不是由一個接口支持。我的猜測是,在Java 1.6中,他們故意實施Deque以包含此方法。

在Java 1.4中,LinkedList只有getFirst(),但它不支持接口。

很顯然,我會說這是保持向後兼容性的問題:

  • LinkedList 1.4有getFirst()和 只有List接口
  • LinkedList 1。5個工具Queue,因此需要支持等效elements()方法
  • LinkedList 1.6器具Deque但因爲:a)它必須保持向後兼容和b)通過策略,所有的方法應該通過接口進行備份,所述Deque界面還包括重複方法
相關問題