2010-02-03 118 views

回答

4

當你知道如何正確的反應,現在和/或期望的元素是不存在,然後使用輪詢。

否則使用刪除。

1

有時候你想爲一個空隊列返回空值,有時你想它來治療空隊列作爲例外情況。

0

這兩種方法都在約隊列結構經典討論使用不同。我主要使用poll()來檢索項目,remove()主要是如果我需要修改正常循環外的隊列。

14

在某些情況下,預計隊列將是空的,並且在那些情況下有一個不引發異常的方法是適當的。在其他情況下,這是一個例外情況,該隊列是空的,並且例外是適當的。

拋出異常會導致性能損失,並且如果您希望隊列不時被清空,您不希望處理隊列空邏輯作爲捕獲異常 - 它是既昂貴又難以閱讀。

在相反的情況下,您不希望隊列永遠爲空,這是一個編程錯誤或其他異常情況的跡象,而且您不想編寫醜陋的錯誤條件檢查代碼(例如,檢查null),因爲在這種情況下,它比捕獲異常(可以在另一個範圍內執行)更不可讀。

+2

這個答案解釋的基本區別,只是不知道,這引發異常,並沒有。 – Achow 2012-12-21 08:05:23

11

抽象類AbstractQueue<E>實現Queue<E>並定義remove方法。

你可以看看源代碼:

public E remove() { 
    E x = poll(); 
    if (x != null) 
     return x; 
    else 
     throw new NoSuchElementException(); 
} 

所以,你可以看到,remove()方法使用poll()方法。

你可以使用你喜歡的一種。在回答

+1

我正在使用此poll()調用我的隊列實現。令人驚訝的是,它拋出了NoSuchElementException。任何解釋? -.- – 2014-03-04 09:01:31

+0

也許你同時訪問隊列? – 2016-02-11 14:25:11

4

看,這不是很清楚,我這做了什麼,因此:

直從API: 刪除()和poll()方法,在他們的行爲只不同的時隊列爲空:remove()方法拋出一個異常,而poll()方法返回null

1

Remove()方法不同於輪詢僅在於如果此隊列爲空則拋出異常。

enter image description here

+0

你最好通過這個文本使用>來引用 – 2016-09-26 22:32:33

相關問題