1. 程式人生 > >Queue介面分析:add和offer區別,remove和poll方法到底啥區別

Queue介面分析:add和offer區別,remove和poll方法到底啥區別

往佇列中新增元素有兩個方法,分佈是add和offer方法,兩者的入參和返回值都一樣,或許很多同學都奇怪,為什麼,要有這兩個功能類似(都是新增元素),但方法名不一樣的方法,看看原始碼的註釋

以下為Queue介面中方法定義:

```
public interface Queue<E> extends Collection<E> {
  
     /*
    *  add方法,在不違背佇列的容量限制的情況,往佇列中新增一個元素, 如果新增成功則返回true,  如果因為容量
    * 限制新增失敗了,則丟擲IllegalStateException異常    
    * 
    *  在有容量限制的佇列中,最好使用offer方法
    *  另外,add方法相對與offer方法而言,有一個專門丟擲的異常IllegalStateException,代表由於容量限制,
    * 導致不能新增元素的異常,介面中可能看不出,等看具體實現就明白了
    */
    boolean add(E e);

   /*
    *
    *  offer方法在不違背容量限制的情況,往佇列中新增一個元素,如果新增元素成功,返回true,
    *  如果因為空間限制,無法新增元素則,返回false;
    *  
    *  在有容量限制的佇列中,這個offer方法優於add方法,結合上文中add的註釋,可知,
    *  在容量限制的佇列中, add方法通過拋異常的方式表示容量已滿,offer方法通過返回
    *  false的方式表示容量已滿,拋異常處理更加耗時,offer直接返回false的方式更好
    * 
    */**
    boolean offer(E e);

   /*
    *  刪除佇列頭的元素,這個方法和poll方法的不同之處在於,這個方法在佇列為
    * 空的時候選擇拋異常
    * 
    */
    E remove();

   /*
    *  poll方法也是刪除佇列頭的遠,如果佇列為空的化,返回null
    * 
    */
    E poll();

   /*
    *  返回佇列頭元素,這個方法和peek方法的區別在於,入股佇列為空,將拋異常
    * 
    */
    E element();

   /*
    *  返回佇列頭元素,如果佇列為空,將返回空
    * 
    */
    E peek();
}

總結

1. queue的增加元素方法add和offer的區別在於,add方法在佇列滿的情況下將選擇拋異常的方法來表示佇列已經滿了,而offer方法通過返回false表示佇列已經滿了;在有限佇列的情況,使用offer方法優於add方法;
2. remove方法和poll方法都是刪除佇列的頭元素,remove方法在佇列為空的情況下將拋異常,而poll方法將返回null;
3. element和peek方法都是返回佇列的頭元素,但是不刪除頭元素,區別在與element方法在佇列為空的情況下,將拋異常,而peek方法將返回null.