Java队列接口
介紹:
隊列是FIFO(先進先出)抽象數據類型(ADT)。 換句話說,按插入順序將元素刪除。
java.util.Queue是Java 中的接口,并且從java.util.Collection擴展。 一些常用的Queue實現類包括LinkedList, ArrayDeque和PriorityQueue 。
隊列類型:
隊列有兩個主要類別:
1.阻塞隊列:這些是具有固定容量的有界隊列。 這意味著我們必須在創建隊列時提供隊列的容量。
java.util.concurrent包中提供了有界隊列的實現類。 例如,一個ArrayBlockingQueue 。
2.非阻塞隊列: java.util包下的隊列實現屬于此隊列類別。 例如, LinkedList或PriorityQueue 。
顧名思義, 這些元素是無限制的,我們可以根據需要插入任意數量的元素。
關鍵方法:
讓我們看一下Queue接口公開的最常用方法:
引發異常:
下面的方法將嘗試對隊列進行操作。 如果由于某種原因(例如由于容量問題)而失敗,則會拋出運行時異常:
1.
使用add() ,我們可以將元素添加到隊列中:
Queue<Integer> queue = new LinkedList<>();queue.add(1); queue.add(2); queue.add(3);如果元素插入成功,則返回true 。 否則,它將引發IllegalStateException。
2.
我們可以使用remove()方法來檢索和刪除隊列頭部的元素 :
int removedItem = queue.remove();System.out.println(removedItem); //prints 1System.out.println(queue); // [2, 3]請注意,我們從隊列中刪除了第一個元素。 因此,現在我們的隊列僅包含[2,3] 。
在空隊列上調用時,此方法將引發NoSuchElementException 。
3.
此方法將僅返回隊列的head元素,而不會將其刪除 :
int topItem = queue.element(); // 2System.out.println(queue); //[2, 3]請注意,我們的隊列仍然包含兩個元素。
就像remove()一樣 ,它將為空隊列拋出NoSuchElementException異常。
返回特殊值:
現在,我們將介紹上述方法的細微變化。 這些方法不會拋出異常。 當他們無法執行操作時,他們寧愿返回一些值 :
1.
就像add()一樣 ,我們有一個offer()方法,可以用來插入元素:
Queue<Integer> queue = new LinkedList<>(); queue.offer(1); queue.offer(2); queue.offer(3);如果無法插入,它將返回false。
2.
我們可以使用poll()檢索和刪除元素:
int removedItem = queue.poll(); // returns 1System.out.println(queue); //[2, 3]對于空隊列,它將僅返回一個空值。
3.
與element()類似,它只是檢索隊列的最前面的元素:
int topItem = queue.peek(); // 2System.out.println(queue); //still [2, 3]由于我們已經刪除了1 ,因此這里的頂部元素是2 。
如果在空隊列中使用此方法,則將獲得空值。
其他有用的方法:
由于Queue從Collection接口擴展而來,因此它也從該接口繼承方法。 一些有用的包括:
1. size():返回隊列的大小
2. contains():如果元素存在于隊列中,則返回true
3. isEmpty() :對于空隊列,它將返回true 。 否則為false 。
結論:
在本文中,我們討論了Java中的Queue接口。 我們介紹了此接口公開的所有主要方法。
成為第一個發表評論的人。
翻譯自: https://www.javacodegeeks.com/2019/05/java-queue-interface.html
總結
- 上一篇: 备份的linux命令,备份文件的命令(备
- 下一篇: 安卓hce云闪付怎么弄(安卓hce)