2013-02-13 21 views
16

LinkedList以下每組元素檢索操作中的不同方法之間是否存在差異?Java LinkedList - 檢索操作之間的差異

返回null +刪除操作:poll(),pollFirst()

返回null +不刪除操作:peek(),peekFirst()

引發異常+刪除操作:pop()remove()removeFirst()

投擲異常+未移除操作:element(),getFirst()

插入方法中存在類似的重複。

如果沒有這樣的差異,我會期望在方法的javadoc中提到它(類似於老的「這就像調用...」一樣)。這只是一個馬虎的文檔,或者我錯過了什麼?

+0

我不明白你在問什麼。 javadoc不是很清楚。它說明每種方法都很清楚。有什麼問題? – 2013-02-13 10:32:29

+1

如果有任何重複,這是因爲'LinkedList'實現了多個基本接口('Deque','List','Queue'等) – 2013-02-13 10:33:50

+0

@JBNizet - javadoc很清晰,但重複仍然存在。 @OliCharlesworth - 大部分重複都在'Deque'裏面,這意味着我應該提出關於'Deque'本身的問題。 – Elist 2013-02-13 10:44:53

回答

12

它們之間沒有什麼區別,它也在文檔中列出,但是你必須做一些遞歸搜索才能到達那裏。

LinkedList實現兩個接口 - QueueDeque。並且DequeQueue延伸。

現在,Deque已經定義了方法 - Deque#pollFirst()並繼承了方法 - Queue#poll()

因此,LinkedList基本上爲它實現的兩個接口定義了這兩種方法。

而關於這兩種方法之間的相似性,它被列在Deque文檔爲:

此接口擴展了Queue接口。當使用隊列作爲 隊列時,會產生FIFO(先進先出)行爲。元素在deque的末尾添加 並從頭開始刪除。從隊列接口繼承的方法 完全等效於的Deque 方法,如下表所示:

並有一個表,列出Queue類的方法和等效Deque方法。例如參見Deque#poll(),Deque#peek()。他們清楚地列出了等效的方法。

0

它們之間的區別在於它們的版本和LinkedList實現的接口。基於poll()pollFirst()

實施例:

LinkedList爪哇1.2一起釋放。

由於1.5鏈表實現隊列接口,它有

public E poll() 

由於1.6鏈表實現雙端隊列接口,它有

public E pollFirst() 

編輯: 它是由於向後兼容性,保持舊的實現非常重要。

+1

謝謝,這可能是對的。唯一的例外是removeFirst()和pop(),javadoc會說「這個方法等價於removeFirst()」。 – Elist 2013-02-13 10:40:44

+0

向後兼容性不是原因。原因是'LinkedList'實現了多個接口。 – 2013-02-13 10:51:12

+0

@Elist。請注意,答案中的原因不正確。只需FYK – 2013-02-13 10:57:20

0

你的權利這是壞的文件或什麼的。

peek() 檢索但不移除此列表的頭(第一個元素)。

peekFirst() 檢索但不移除此列表的第一個元素,或者如果此列表爲空,則返回null。

這就是它所說的,我在我的Java書中讀到這個頭是列表中的第一項。