Apache Commons CircularFifoQueue指南
1.概述
在本快速教程中,我們將看看Apache Commons Collections庫的collections4.queue包中提供的CircularFifoQueue數據結構。
CircularFifoQueue
2. Maven依賴
對於Maven項目,我們需要添加所需的依賴項:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.1</version>
</dependency>
您可以在Maven Central上找到該庫的最新版本。
3.構造函數
要創建CircularFifoQueue對象,我們可以使用默認構造函數,該構造函數創建默認大小為32的隊列:
CircularFifoQueue<String> bits = new CircularFifoQueue();
如果我們知道所需的隊列最大大小,則可以使用將int作為參數指定大小的構造函數:
CircularFifoQueue<String> colors = new CircularFifoQueue<>(5);
還有一個選項,可以通過向構造函數提供一個集合作為參數來創建CircularFifoQueue對象。
在這種情況下,隊列將使用集合的元素填充,並且隊列的大小將與集合的大小相同:
CircularFifoQueue<String> daysOfWeek = new CircularFifoQueue<>(days);
注意:由於此隊列在構造時已滿,因此任何添加都會導致第一個創建的元素被丟棄。
4.添加元素
與任何Queue實現一樣,我們可以使用add和offer方法添加元素。隊列JavaDoc指定與容量受限的隊列一起使用時,將使用offer方法。
但是,由於CircularFifoQueue是非阻塞的,因此插入不會失敗。結果,它的添加和提供方法表現出相同的行為。
讓我們看看如何使用add方法將元素添加到顏色隊列中:
colors.add("Red");
colors.add("Blue");
colors.add("Green");
讓我們使用offer方法添加一些元素:
colors.offer("White");
colors.offer("Black");
5.刪除和檢索元素
CircularFifoQueue類為我們提供了一些方法,這些方法在需要操縱隊列的元素時很有用。有些方法用於從隊列中獲取元素,有些方法用於刪除元素,有些方法用於同時執行兩個操作。
5.1。peek方法
peek方法是非破壞性的,它返回隊列的頭部。
只要兩次調用之間的隊列中的元素沒有任何更改,此方法將始終返回相同的元素。如果隊列為空,則peek將返回null:
String colorsHead = colors.peek();
5.2。element方法
element方法類似於peek -它返回隊列的當前頭。
但是,如果隊列為空,則element方法將引發異常:
colorsHead = colors.element();
5.3。get方法
當我們需要從隊列中獲取某個元素時,可以使用get方法。此方法將所需元素的索引作為參數。隊列的索引從零開始。
讓我們從前面填充元素的顏色隊列中獲取一個元素:
String color = colors.get(1);
這將返回“ Blue ”。
現在,我們將三個元素添加到隊列中,然後再次檢查此結果:
colors.add("Orange");
colors.add("Violet");
colors.add("Pink");
color = colors.get(1);
這次, get方法返回“ Black ”。這是因為創建的隊列的大小限制為五個,並且刪除了前三個元素(“紅色”,“藍色”,“綠色”),並添加了新元素。
5.4。poll法
poll方法刪除隊列的head元素並返回該元素。如果隊列中沒有元素,則poll方法返回null:
colorsHead = colors.poll();
5.5。remove方法
remove方法的**操作與poll方法非常相似,它返回隊列的開頭並刪除返回的元素。但是,如果隊列為空,則remove將引發異常**:
colorsHead = colors.remove();
5.6。清除方法
當我們想清空隊列時,可以使用clear方法:
colors.clear();
6.檢查方法
在了解瞭如何添加,刪除和檢索隊列元素之後,讓我們看看該類在檢查其大小和容量方面所提供的內容。在示例中,我們將使用在前面各節中創建的隊列。
通常,我們有兩種檢查隊列大小的方法-一種用於獲取對象的最大大小,一種用於檢查其當前元素計數。
maxSize方法將返回隊列最大大小的整數值:
int maxSize = bits.maxSize();
這將返回32 ,因為使用默認構造函數創建了位隊列。
size方法將返回當前存儲在隊列中的元素數:
int size = colors.size();
要檢查隊列對象的容量,我們可以使用isEmpty和isAtFullCapacity方法。
isEmpty方法將返回一個布爾值,該值指示隊列是否為空:
boolean isEmpty = bits.isEmpty();
要檢查隊列是否已滿,可以使用**isAtFullCapacity方法。僅在達到隊列中元素的最大大小時,此方法才返回true** :
boolean isFull = daysOfWeek.isAtFullCapacity();
您應該注意,此方法從4.1版本開始可用。
可以用來檢查隊列是否已滿的Queue接口的另一種方法是isFull方法。對於CircularFifoQueue , isFull方法將始終返回false,因為隊列始終可以接受新元素:
boolean isFull = daysOfWeek.isFull();
7.結論
在本文中,我們看到瞭如何使用Apache Commons CircularFifoQueue 。我們看到了一些示例,這些示例說明瞭如何實例化隊列對象,如何填充隊列對象,如何將其清空,如何從中獲取和刪除元素以及如何檢查其大小和容量。
您可以在我們的GitHub項目中找到本文中使用的完整示例代碼。這是一個Maven項目,因此您應該能夠將其導入並按原樣運行。