LinkedList
對element()
方法和getFirst()
方法有類似的描述(奇怪 - 不是相同的單詞)。LinkedList類中的element()和getFirst()方法有什麼區別?
Deque
明確指出兩種方法在返回值和異常方面是相同的。
我的問題是 - 爲什麼有2個相同的方法?它是否具有向後兼容性?一種方法比另一種更有效嗎?
LinkedList
對element()
方法和getFirst()
方法有類似的描述(奇怪 - 不是相同的單詞)。LinkedList類中的element()和getFirst()方法有什麼區別?
Deque
明確指出兩種方法在返回值和異常方面是相同的。
我的問題是 - 爲什麼有2個相同的方法?它是否具有向後兼容性?一種方法比另一種更有效嗎?
element()
從Queue
下才有意義只有一個訪問的方法,因爲你可以排隊做的是刪除第一個元素繼承。然而,一個deque支持這個從這兩個結束,需要明確的方法來這樣做。
設計一個API可以讓你訪問第一個元素element()
而最後一個元素訪問getLast()
並不是很好。
可能玩成這樣另一件事是,Deque
在1.6,在Java Collections Framework的古地區的部分地區已過時的新公約,如明確get~
/set~
方法訪問屬性增加。在這種情況下,getFirst()
和getLast
更貼近當前的Java約定。
在列出的鏈接中,它們看起來像是相同的。但在隊列中,element()
似乎是在隊列中的第一個元素處達到峯值的方法,但不會將其從隊列中移除。
在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
界面還包括重複方法
實際上,get/set約定並不是真正的新約,它實際上比集合框架更舊(例如,將舊的Vector類與新的List接口進行比較)。 – 2011-02-06 20:21:04
老實說,在這種情況下,element()方法應該已經被淘汰。假設很多人不會讚賞,難道它至少已經被棄用了嗎?或者至少在Javadocs中有一種關於從哪兩種方法中挑選出的方法。 (我相當肯定,這不是Java中重複方法的唯一例子)。 – user183037 2011-02-06 21:16:25