介绍:
队列是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 1
System.out.println(queue); // [2, 3]
请注意,我们从队列中删除了第一个元素。 因此,现在我们的队列仅包含[2,3] 。
在空队列上调用时,此方法将引发NoSuchElementException 。
3.
此方法将仅返回队列的head元素,而不会将其删除 :
int topItem = queue.element(); // 2
System.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 1
System.out.println(queue); //[2, 3]
对于空队列,它将仅返回一个空值。
3.
与element()类似,它只是检索队列的最前面的元素:
int topItem = queue.peek(); // 2
System.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