2011-04-11 26 views
0

由於ArrayDeque類實現了Deque,並且它沒有任何容量限制。 像addFirst(),addLast()等異常拋出方法的目的是什麼?由於數組沒有邊界,因此它會在任何情況下添加元素。有人可以請解釋一下我們可以在try{}catch{}塊中使用的實現,以及addFirst可以拋出異常的場景嗎?Deque的ArrayDeque類

try{ArrayDeque adObj = new ArrayDeque(); 
adObj.addFirst("Oracle");//we can keep on adding first. Use to exception handling? 
}catch(Exception e){ 
} 

回答

1

ArrayDeque確實有潛在的容量問題,這意味着它可能會拋出。它每次擴展容量都會翻倍,因此最終不能再增加一倍。的代碼的一種實現方式中執行以下操作:

private void doubleCapacity() { 
    int n = elements.length; 
    int newCapacity = n << 1; 
    if (newCapacity < 0) 
     throw new IllegalStateException("Sorry, deque too big"); 
} 

隨着addFirst的定義是因爲該方法可以拋出至少兩個接口上的文檔中描述的例外的下方。

public void addFirst(E e) { 
    if (e == null) 
     throw new NullPointerException(); 
    elements[head = (head - 1) & (elements.length - 1)] = e; 
    if (head == tail) 
     doubleCapacity(); 
} 

正如其他人所說的,接口上的JavaDoc只是給出了可能的例外。它拋出的所有類型都沒有檢查異常,所以你不需要捕捉它們。

0

Deque的某些實現是綁定的(即容量有限),有些不是。如果已達到限制,則方法(如addFirst)會拋出IllegalStateException。其他方法(如offerFirst)會返回一個布爾值來指示相同的結果。

如果您不想處理潛在的異常,或知道不會有任何異常,只需使用offerFirst並忽略結果。

0

A Deque拋出IllegalStateException,因爲Java允許您使用不同的或創建自己的實現Deque,它可能有大小限制。 ArrayDeque不會拋出這些例外,所以如果您完全確定您的代碼將使用ArrayDeque然後聲明它們,並且它們不會拋出IllegalStateException