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