Queue介面分析:add和offer區別,remove和poll方法到底啥區別
阿新 • • 發佈:2018-11-21
往佇列中新增元素有兩個方法,分佈是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.